Tag 20: MQTT (Message Queue Telemetry Transport)

Für die letzten Tage in diesem Advent werden Sie nun ein Thema kennenlernen, welches eine große Rolle im Bereich IoT spielt. Es geht um das Nachrichten-Protokoll MQTT (Message Queue Telemetry Transport) welches speziell für die Kommunikation von Machschienen zu Maschinen (M2M) entwickelt wurde. Der Grund warum dieses Protokoll so genial ist, liegt in der Kompaktheit und Einfachheit, mit der Daten wie Steuerdaten, Messdaten oder Texte, ausgetauscht werden können. Im Vergleich zum HTTP ist der Overhead (Daten die neben den eigentlichen Nutzdaten übermittelt werden) sehr kurz und können gerade von Embeded Devices, also Mikrocontrollern wie unserem NanoESP, gut verarbeitet werden. Gleichzeitig muss der Controller nicht selbst immer wieder eine Verbindung aufbauen und erfragen, ob es eine Veränderung gab, sondern die Verbindung wird dauerhaft gehalten und der Client automatisch über Veränderungen Informiert.

Grundlange für die Kommunikation bildet ein sogenannter Broker. Ein Broker ist eine Server-Anwendung, die alle Daten verarbeitet. Ein Gerät kann sich nun mit dem Broker verbinden und Nachrichten „publischen“ (veröffentlichen), also an den Broker senden. Ein anderes Gerät kann dann bestimmte Themen (Topics genannt) „subscriben“ (abonnieren) und bekommt dann sofort eine neu zu diesem Thema veröffentlichte Nachricht von Broker zugestellt. Damit Sie nicht selbst einen Broker einrichten müssen, wurde ein öffentlicher Broker unter der Adresse broker.fkainka.de für Sie eingerichtet.

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 ein + oder # können gleich mehrere Themen gleichzeitig abonniert werden. Die Topics

MyHome/Kitchen/Temperature

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. Das # ersetzt gleich alle. Mit dem Topic

MyHome/#

empfangen Sie also alle Nachrichten, die in allen Untertopics von MyHome gepublished werden. Die Daten, die zu einem Topic veröffentlicht werden, können so ziemlich alles sein von reinen Text über Messwerte oder einfache 1/0 Befehle zum Schalten von Licht.

Hinter dem heutigen Türchen befindet sich ein Taster. In dem heutigen Versuch wollen wir vor allem ein paar Trockenübungen zum Thema MQTT machen. Deswegen laden Sie das heutige Programm in das Board und öffnen Sie den Seriellen Monitor. Nach kurzer Zeit sehen Sie in etwa folgende Meldungen:

Die Meldungen im Seriellen Monitor

Die Meldungen im Seriellen Monitor

Das Board hat sich also erst mit dem WLAN verbunden und dann mit dem Online-Broker. Damit sich die vielen verschiedenen Nutzer nicht in die Quere kommen, muss eine besondere Struktur eingehalten werden. Sie können also nur in Unterthemen der Form NanoESP/MyMQTTiD/… schreiben, wobei Sie MyMQTTiD durch die ID ersetzen müssen, die Sie vom Board im Seriellen Monitor angezeigt bekommen. Für den heutigen Tag heißt dass, dass alle in das individuell angepasste Topic NanoESP/MyMQTTiD/test schreiben.

Damit Sie auch sehen können, was Sie in ein Topic schreiben, benutzen wir auf dem Rechner ein online Tool der Firma HiveMQ. Mit diesem Tool können Sie sich ebenfalls mit dem Broker verbinden und Ihre persönlichen Topics abonnieren oder in dieses schreiben. Gehen Sie nun also auf die Seite www.hivemq.com/try-out/ und klicken dort auf „Try the websocket client“. Nun müssen Sie zunächst eine Verbindung zu dem Broker aufbauen, indem Sie im Punkt Connection unter Host die Adresse broker.fkainka.de eintragen. Der Port und die ClientID können so bleiben und auch die anderen Parameter stimmen. Klicken Sie auf Connect. Hat alles funktioniert erscheint oben rechts neben einem grünen Punkt der Text connected und Sie haben in weiteren Bereichen die Möglichkeit, in ein Topic zu Publishen oder ein Topic zu Subscriben.

Klicken Sie zunächst auf „Add New Topic Subscription“ und geben unter Topic NanoESP/MyMQTTiD/test ein, wobei Sie MyMQTTiD durch die ID aus dem Seriellen Monitor ersetzen. Resetten Sie nun den NanoESP mit Druck auf den Resetbutton auf dem Board. Nach kurzer Zeit sollten Sie im Browser unter dem Punkt Messages die Nachricht „Hello from my NanoESP“ empfangen. Sie können auch eine Nachricht an das Board senden, indem Sie unter Pubish in das Topic-Feld NanoESP/MyMQTTiD/test eintragen und unter Message eine beliebige Nachricht eingeben, z.B. „Hello from my Browser“. Nun bekommen Sie im Seriellen Monitor die Nachricht angezeigt. Die Kommunikation steht also.

Der Wensocket Client von HiveMQ

Der Wensocket Client von HiveMQ

27 Kommentare

  1. Steffen

    Hallo,

    ich versuche dieses Projekt und das vom Tag 23 zu mischen.
    Explizit würde ich gern 1:1 dieses hier nehmen und gern in der Loop einen Analogwert einlesen und auf einen anderen Topic publishen.
    Im Prinzip läuft es. der Analogwert kommt sauber durch. Aber dann kann der ESP nicht mehr auf die Message vom Websocket reagieren.

    Jetzt hab ich folgendes probiert: An dem Punkt in der Loop wo das „Value“ der Message seriell ausgegeben wird, da hänge ich mich hinter und publishe 1x den Analogwert. Dann läuft es.
    2ter Versuch: ich setze an dem Punkt wo der „Value“ ausgegeben wird einen Zähler auf z.B. 10. weiter unten im Loop schaue ich ob der Zähler >0 ist, publishe den Analogwert und dekrementiere den Zähler. dann spuckt er mir 10x meinen Analogwert aus, innerhalb der 10x (im Loop mache ich 500ms pause) geht der Nano absolut nicht in die if(mqtt.recvMQTT(id, len, topic, value)…
    sind die 10 gesendet, dann geht er dort sofort wieder rein… ich finde den Fehler leider nicht.
    Ich möchte gern den Analogwert dauerhaft senden und parallel einen Ausgang steuern können. Ich habe es über das Projekt von Taf 21 probiert, aber auch dort bekomme ich den Alarm nicht per Websocket deaktivert….

    über Tips wäre ich dankbar

    Antworten
  2. AnFi

    Hallo Gemeinde
    ich hoffe, dass noch einige aktiv sind auf dem Gebiet MQTT. Ich habe nämlich folgendes Problem:
    Ich betreibe einen CO2-Sensor mit einem IR-Sensor am NanoESP. Das funktioniert problemlos auch mit einer OLED-Ausgabe I2C, solange ich nicht mit MQTT kutschiere.
    Bei MQTT funktioniert die Erfassung der Daten und die Ausgabe an MQTT auch problemlos (A16, P20) NICHT aber die OLED-Ausgabe. Kennt jemand dieses Phänomen?

    Ich vermute einen Konflikt Wire/I2C mit der Library NanoESP_MQTT.h.

    Antworten
  3. forget me not

    Dieser Tag(20) ist die Bestätigung das der Kalender sein Geld nicht wert wahr bzw. ist.

    Es gibt keine Erklärungen zu irgendwas, seit Tag eins.
    Aber diese „Anleitung“ ist einfach nur mehr Lächerlich.
    Es gibt keine Erklärung zum Code, vor allem die Änderungen die noch zu machen sind, es sind auch sonst keine Erklärungen enthalten die auf das eigentliche Projekt eingehen.
    Es sind einfach nur ein paar punkte die zum Projekt gehören quer aufgelistet, die zum Teil nicht Funktionieren z.B. der
    „hivemq.com/try-out/“- Link Leitet mich zu MS-OneDrive.

    Unter anderem sind die „fritzing“ Schaltpläne Fehlerhaft!!!(solltet ihr echt mal überprüfen(z.B. Tag 18 oder die Widerstände an den Verbraucher anpassen))

    Bei solchen Produkten erwartet man eigentlich ein brauchbares
    Tutorial.
    Die Bauteile Rechtfertigen den Preis Jedenfalls nicht.

    Antworten
  4. Michael

    Hallo,

    wer – wie nun einmal ich – nicht das Gerät mit dem Internet verbinden möchte und trotzdem den Versuch durchführen will, kann es mit Mosquitto (https://mosquitto.org/), einem alten RaspiPi und einem Client-Rechner probieren.

    Die Software ist im Rasbian-Repository vorhanden, so dass ein einfaches „apt install mosquitto“ reicht. Auf einem Client-Rechner muss dann noch die Client-Software (Ubuntu: apt install mosqitto-client) installiert werden.

    Die Arduino-Software muss nur in der Zeile “ if (mqtt.connect(0, „IP-Adresse-RasPI“, 1883, mqttId)) {“ entsprechend geändert werden.

    Aus dem Seriellen Monitor muss noch der Topic gelesen werden

    Dann kann man – weniger komfortabel – mit der Zeile

    mosquitto_pub -h IP-Adresse-RasPi -m „Hallo“ -t „“

    eine Nachricht auf dem Client absetzen, die im seriellen Monitor erscheint.

    Antworten
    1. Michael

      Ups… da sind wohl ein paar Größer-/Kleiner-Zeichen dem Filter in die Arme gelaufen. Besonders in der Zeile könnte es zu Missverständnissen führen:

      mosquitto_pub -h IP-Adresse-RasPi -m „Hallo“ -t „“

      Hinter dem -t muss in Anführungsstrichen das Topic eingetragen werden – wo wies in in dem seriellen Monitor erscheint.

      Ansonsten ist aber die Anleitung von Mosquitto recht hilfreich…

      Antworten
    2. HGR73

      DANKE für den Hinweis/Vorschlag und den näheren Infos dazu!

      Antworten
  5. Trilo

    Lustige Nachrichten, wenn viele die selbe ID haben… aber es funktioniert.

    Messages

    2016-12-20 23:05:25
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    hehe yeah

    2016-12-20 23:05:16
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    maybe we hear each other tomorrow again ;-)

    2016-12-20 23:05:06
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    We’re back to IRC

    2016-12-20 23:05:01
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    yeah, i got that one as well (i’m not the swedish guy)

    2016-12-20 23:04:47
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    and opening door 20 leads me to this ;-)

    2016-12-20 23:03:58
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    in germany Conrad sells christmas Calender….

    2016-12-20 23:03:31
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    this is really finny to share the same 18fe34cfb569

    2016-12-20 23:03:20
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    I see i haven’t been the only one who had the idea to subscribe to NanoESP/# ^^

    2016-12-20 23:01:52
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    It becomes a little like 4chan, you don’t know how anybody is

    2016-12-20 23:01:18
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    funny

    2016-12-20 23:00:59
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    Swedish

    2016-12-20 23:00:56
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    yes… but my ESB Board has generated this ID ;-)

    2016-12-20 23:00:48
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    subscribe to NanoESP/+/test

    2016-12-20 23:00:37
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    german?

    2016-12-20 23:00:23
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    You can subscribe and publish to anyones id

    2016-12-20 23:00:03
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    ;-) same ID?

    2016-12-20 22:59:44
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    No I’m Tomas

    2016-12-20 22:59:32
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    Hi Stephan (2)

    2016-12-20 22:59:16
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    Hello from my NanoESP

    2016-12-20 22:58:59
    Topic: NanoESP/18fe34cfb569/test
    Qos: 0
    Hi Stephan

    Antworten
  6. Michel2016

    boh… die Anleitung ist so ungenau… Wo soll ich jetzt genau die ID eintragen die im Monitor angezeigt wird?
    Denn NanoESP/MyMQTTiD/test kann ich nicht finden. Ne Zeilenangabe wäre ganz hilfreich.

    Antworten
  7. DS2072

    Funktioniert. Ich bekomme die Meldung bei HiveMQ und kann darüber auch an meinen seriellen Monitor senden. Als weiteren Test habe ich meinem Schwager die Site HiveMQ gegeben, er hat meine MQTT-ID einegtragen und sich connected mit der Subscription und ich habe den Reset hier durchgeführt, auch er bekam die Meldung angezeigt und konnte mir etwas an meinen seriellen Monitor schicken.

    Antworten
  8. Cubiator

    Hast Du den bei „Subscriptions“ auch das Topic mit deiner ID angegeben? Ansonsten weis die Website ja nicht was sie empfangen soll, dort senden wir ja alle hin und mit der ID wird die Message gefiltert.

    Antworten
    1. Leon

      Irgendwie habe ich das Problem das ich mich nicht verbinden kann, da immer wenn ich auf Connect clicke eine Fehlermeldung erscheint….

      Antworten
  9. Leon

    Leider kommt bei mir immer nachdem ich Broker.fkainka.de
    bei Host eingegeben habe und auf Connect klicke :

    Antworten
    1. casesensitive

      Versuche doch einmal Dich mit broker.fkainka.de zu verbinden anstatt mit Broker.fkainka.de.

      Antworten
  10. Mormox82

    Bei mir kommt:

    Error WLAN Connect
    My IP: 0.0.0.0
    My MQTT ID:

    error connecting

    Antworten
    1. Mormox82

      Hab Tag4 wiederholt und ging alles.
      war aber eine schwere Geburt.

      Antworten
  11. prisma01

    Beim ersten Versuch bekam ich eine Meldung vom NanoESP, danach niht wieder, aber vom Browser zum Nano klappts…

    Antworten
    1. Cubiator

      Ich habe eben noch einmal getestet, wenn ich die Resettaste auf dem NanoESP drücke bekomme ich nach ca. 5 Sekunden eine Rückmeldung auf der Website.

      Die eingegangenen Meldungen auf Neinem NanoESP sehe ich aber keine Resets. Drückst Du ach zwischendurch mal den Reset? Die Meldung kommt nur einmal kurz nach einem Start des NanoESP sobald er sich mit dem Broker verbunden hat.

      Antworten
  12. anna

    hi, ich kann die seite „broker.fkainka.de“weder mit Safari, noch mit Mozilla öffnen… Jemand eine Idee woran es liegen kann?

    Antworten
    1. Cubiator

      Hallo Anna,

      das sollst Du auch gar nicht können. Das ist keine Website sondern ein MQTT Broker. Du sollst DIESE Seite öffnen–> http://www.hivemq.com/try-out/ dort klickst Du „try the websocked client“ an, dort werden dann die Daten des Brokers(broker.fkainka.de) eingetragen.

      Antworten
  13. bernd

    Wieder mal nur halbwegs,
    es gelingt mir zwar eine message von HIVMQ zu senden (taucht im arduino monitor auf) aber die message vom Nano taucht nicht auf (in MQ).

    Antworten
    1. Cubiator

      Hallo Bernd,

      hast Du denn auch den NanoESP nach Eingabe der Daten resetet? Dann kommt bei mir nach einer erfolgreichen Verbindung die Message im Browser an.

      Antworten
      1. Bernd

        ja, mehrmals

        Antworten
        1. Cubiator

          Hmm,

          hier klappt es reproduzierbar.

          Antworten
          1. Bernd

            Ich habs nochmal von scratch probiert, gleiches resultat (nur von MQT zum board, kein hello) .topic muss ich von hand eingeben, kommt nicht automatisch und mit testtopic/1 tut sich überhaupt nichts.
            Auch wenn ich was in com 3 schreibe und schicke tut sich nichts.
            anbei Bild mit serial print nach reset.

    2. fk (Beitrag Autor)

      Hi, in welches topic sendest du die Nachricht?

      Antworten
      1. Bernd

        Subscribed to:
        NanoESP/18fe34cfa972/test

        Published to:
        NanoESP/18fe34cfa972/test

        Antworten
      2. Bernd

        I’ll be damned – jetzt geht es plötzlich in beide Richtungen. Irgendwas gemacht?

        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.