Day 11: MQTT

There is a cable set again hidden behind the door today. We will need it in the next few days when the setups become more complex.

Over the past few days we have sent most of our data via UDP. This protocol is very convenient; on the one hand it has a small overhead (data is sent in addition to the actual application data) and on the other hand, it is a broadcasting system and can thus send data to several devices simultaneously. But today we will learn about a second protocol that plays a major role in IoT. This is the message protocol MQTT (Message Queue Telemetry Transport) and it was specifically developed for machine-to-machine communication (M2M). The reason that this is such a brilliant protocol is due to its compactness and simplicity when it comes to exchanging data between devices such as control data, measurement data or text. Compared to HTTP, the overhead is very small. That is why embedded devices such as microcontrollers like our NodeESP can process the data well.

A so-called Broker forms the basis for communication. A broker is a server application that processes all the messages. A device like our NodeESP can connect to the broker and publish messages and also send them to the broker. Another device can then subscribe to certain topics and will instantly receive all new messages from the broker published on these topics.

Der MQTT-Broker stellt die Nachrichten zu

The MQTT broker delivers messages

Topics are structured hierarchically, whereby subtopics are separated by /. And then there are the wildcards. You can subscribe to several topics at the same time using the signs + or #. If you subscribed to MyHome/+/Temperature you would receive the topics MyHome/Kitchen/Temperature and MyHome/ Bathroom/Temperature all together for example. “Plus” will replace only one topic level and “hash” will replace them all. You would receive all messages posted under all subtopics of MyHome if you subscribed to MyHome/#. A message can be just about anything: from plain text to readings to simple 1/0 light switching commands.

We don’t need to set up hardware today. We will start with some basic tests. Go to the settings on the configuration page. Most certainly you have already noticed the area with MQTT Settings. Here you will find already properly preconfigured settings. We have set up a server especially for the Advent calendar project as the broker address, namely broker.fkainka.de. But you can also set up a broker yourself on your Raspberry Pi.  I recommend the open-source software Mosquitto. The client ID is generated using the board’s MAC address. This ID is globally assigned to one single device across all servers. As a MAC address should be unique in the world, it is very suitable as an ID here. You don’t need a username and password for the test broker.

Test the connection by clicking on the Test Connection button below. The colour of the area next to it should change to green, if the connection to the broker was established successfully. If this won’t work, it may be that the server is down and you need to change the broker. An alternative freely available broker is for example broker.mqttdashboard.com.

Once you have tested the basic connection, you can now set up the program of today. Then go to the page

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

Die HiveMQ Seite

The HiveMQ Page

and click Try the websocket client. You will see a log on screen to an MQTT broker with WebSocket support. Under Host, enter a broker, here we use broker.fkainka.de, and then connect. The screen you are seeing above opens next. You can now subscribe to your own personal topic by clicking on Add New Topic Subscription. The topic consists of the term NodeESP and the client ID. For my board this was for example:

NodeESP/240AC48178E4/

Any MQTT communication from and to the board will start with this topic. From now on I will shorten the client ID part using [PID] which stands for “personal ID”. Of course, you will need to replace this part with your own client ID. Experiment with receiving all communication from the board using the topic

NodeESP/[PID]/#

When you reset the board, you will see a message soon after telling you that the board has established a connection to the broker. This message is written to the topic NodeESP/[PID]/status and by subscribing with # you will also receive it. Now you can send your first message to the board. To do this, in the Publish area enter your personal topic plus the subtopic testtopic into the Topic field. In my case:

NodeESP/[PID]/testtopic

Enter any message into the Message field. You can also leave the field blank. Then click Publish and a moment later you will receive two messages in the Messages area. One is a welcoming text and was published under the NodeESP/[PID]/testtopic/out topic. The second message is also welcoming text but as JSON string including command key, and was published under the NodeESP/[PID]/out topic.

These two messages are the result of the board converting the topics into the known command format and then evaluating them. The answers appear in a topic that is composed of the command out, in our case that is.../testtopic /out and at the same time also in the NodeESP/[PID]/out channel.

The equivalent to the out topic is the in topic, where you can directly publish commands in JSON format. For example, if you wrote to the NodeESP/[PID]/ topic the JSON string {“cmd”:”testtopic”}, you would get the same answers as in your first experiment. This means that you can send a command either via a topic or via the in-channel as a JSON object. Don’t be surprised to find out that some well-known commands such get_wifi_status etc. won’t work. The reason is that these commands may contain sensitive data and should not be sent over a public broker.

The connection to the board via MQTT is now established. Tomorrow we will take a closer look and learn what we can do with it.

52 Comments

  1. gege007

    Hallo zusammen!
    Mein NodeESP funktioniert seit der MQTT-Einrichtung nicht mehr. Es blinkt nur noch die rote LED.
    Erreichbar ist das NodeESP auch nicht mehr. Ich habe wie in der Anleitung beschrieben die Software reinstalliert,
    allerdings leuchtet jetzt nur die grüne LED und das Board-Wifi ist nicht vorhanden. Die WPS-Funktion funktioniert ebenfalls nicht. Ich habe das Gleiche noch zwei weitere Male versucht: Immer das gleiche Ergebniss.
    Könnte mir villeicht jemand helfen, wie ich das NodeESP wieder zum Laufen bringe?
    Ich danke schonmal im voraus,
    LG
    gege007

    Reply
    1. gege007

      Jetzt geht es wieder!
      Ich musste die alte Firmware flashen und dann von der Webseite wieder auf die neueste Updaten.
      Warum ist das so? Stimmt irgendetwas mit dem Link nicht?
      Jetzt geht es auf jeden Fall wieder, auch MQTTT.

      Reply
  2. Sven

    Hallo zusammen, ich hoffe hier ist noch jemand aktiv und liest diese Nachricht. Evtl. auch der Ersteller des Ganzen. Mein Board verhält sich einfach nicht wie beschrieben. Wie man in dem Screenshot sehen kann, wird nach dem Laden des Tagesprogrammes noch ein “NodeESP connected” gesendet und angezeigt. Aber dann wird auf keine Nachricht geantwortet. Es kommt immer nur “connected” und “disconnected” (beim Neustart). Ich habe auch schon die Projekte der Folgetage durchprobiert. Es kommt nie wie beschrieben eine Nachricht vom Board. Da man die Projekte der Folgetage nicht auf UDP umstellen kann, hat es sich dann wohl erledigt. Schade ums Geld und die Bauteile. Vielleicht möchte ja jemand sein Board aus dem Vorjahr abgeben?
    Ich sehe aktuell nicht, was ich noch machen kann.

    Reply
    1. Sven

      Hallo Fabian Kainka,

      sind Sie hier irgendwie noch aktiv ? Es ist sehr unschön etwas zu kaufen, wo dann offensichtlich kein Service besteht. Bei Conrad reagiert man auch nicht auf Anfragen.

      Reply
    2. fk (Post author)

      @Sven Ich wundere mich das bei dir bei der Client ID auf der Config-Seite [PID] steht (hab ich auf deinem Screenshot weiter unten gesehen). Hier sollte eigentlich deine automatisch generierte ID stehen. Hast du die geändert?

      Reply
      1. Sven

        Hallo Fabian, Vielen Dank für die Antwort. Da bin ich echt froh, dass hier noch jemand ist …
        Zu deiner Frage, Nein, ich habe da nicht selber [PID] eingetragen.
        Wenn ich jetzt meine ID nehme (die steht ja bei Topic) und diese eintrage muss ich es ja irgendwie speichern … muss ich dafür auf Submit klicken? Wenn ich dies mache startet das Board neu, aber es steht dann wieder [PID] in dem ClientID Feld. Ich habe auch schonmal “Restore Default Config” gemacht. Aber es steht immer [PID] in dem Feld. Gibt es noch eine andere Möglichkeit dies zu ändern oder irgendwo anders zu debuggen wie das gesetzt wird? Oder muss man es irgendwie anders speichern? Wenn ich zB die Server-Adresse ändere dann wird die Änderung übernommen und ist auch nach einem Neustart aktiv.
        Ich hoffe du hast noch eine Idee was ich machen kann. Alternativ auch per Mail.

        Reply
        1. fk (Post author)

          Hallo, eigentlich sollte alles mit submit gespeichert werden. Vielleicht wäre es am einfachsten einmal die Firmware neu zu installieren? Eine Anleitung dazu steht auf
          https://iot.fkainka.de/nodeesp-firmware-reinstallieren

          Reply
          1. Sven

            Hallo Fabian, faszinierend, aber jetzt, nach dem Update, steht auch die ID richtig im Client Feld. Und jetzt wird auch gesendet und empfangen wie beschrieben.
            Vielen lieben Dank !

  3. 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

    Reply
    1. fk (Post author)

      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

      Reply
      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

        Reply
        1. fk (Post author)

          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

          Reply
          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. Sven

            Hallo Fabian, bisher hat eigentlich immer alles funktioniert. Aber heute komme ich mit der Beschreibung nicht weiter (und auch der morgige Tag funktioniert nicht).
            Zwei Probleme:
            1. Wie man im Screenshot sehen kann, habe ich in der Config wie von dir beschrieben auf die IP 5.189.182.151 umgestellt. Alle anderen Einstellungen habe ich so belassen. Trotzdem wird bei “Test Connection” die Anzeige nicht grün. (Wenn ich die URL broker.mqttdashboard.com verwende, wird es grün). Was kann ich noch machen damit es grün wird ?
            2. (Dies ist vielleicht ein Folgeproblem) Wenn ich auf der hivemq.com Seite die Daten wie beschrieben eingebe (Siehe Screenshot), kommt beim Senden einer Nachricht, keine Antwort. Was mache ich falsch ? (‘#’ ist bei Subscription / ‘testtopic’ ist auch angegeben)
            Leider funktioniert dies auch nicht mit broker.mqttdashboard.com

          3. fk (Post author)

            @Sven Ich wundere mich das bei dir bei der Client ID [PID] steht. Hier sollte eigentlich deine automatisch generierte ID stehen. Hast du die geändert?

    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….

      Reply
      1. fk (Post author)

        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.

        Reply
    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…

      Reply
    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 !!

      Reply
      1. fk (Post author)

        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.

        Reply
    5. fk (Post author)

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

      Reply
      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 …

        Reply
        1. fk (Post author)

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

          Reply
          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.

          Reply
          1. fk (Post author)

            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.

      Reply
    7. Markus H.

      ich bekomme den Button nicht auf grün. Hat Jemand die MQTT Settings zur Hand. Kann die nirgends finden.
      SERVER: broker.fkainka.de

      Port: ?

      Client ID: 807D3ADCXXXX ?

      Brauch ich noch weitere Angaben ?

      Reply
  4. 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.

    Reply
  5. 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

    Reply
  6. 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…

    Reply
    1. fk (Post author)

      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?

      Reply
      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

        Reply
        1. Patrick

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

          Reply
          1. fk (Post author)

            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)

  7. 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.

    Reply
  8. 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.

    Reply
  9. 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.

    Reply
  10. 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.

    Reply
  11. 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

    Reply
    1. fk (Post author)

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

      Reply
      1. fk (Post author)

        ich hab die URL jetzt auch im Text angepasst

        Reply
        1. Wolfgang

          Hallo,

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

          Viele Grüße
          Wolfgang

          Reply
  12. 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.

    Reply
    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.

      Reply
      1. fk (Post author)

        Oh stimmt, vielen Dank für den Hinweis

        Reply
  13. 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?

    Reply
    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

      Reply
  14. 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

    Reply
  15. 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.

    Reply

Leave a Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.