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.
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:
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.
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
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.
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.
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.
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…
DANKE für den Hinweis/Vorschlag und den näheren Infos dazu!
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
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.
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.
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.
Irgendwie habe ich das Problem das ich mich nicht verbinden kann, da immer wenn ich auf Connect clicke eine Fehlermeldung erscheint….
Leider kommt bei mir immer nachdem ich Broker.fkainka.de
bei Host eingegeben habe und auf Connect klicke :
Versuche doch einmal Dich mit broker.fkainka.de zu verbinden anstatt mit Broker.fkainka.de.
Bei mir kommt:
Error WLAN Connect
My IP: 0.0.0.0
My MQTT ID:
error connecting
Hab Tag4 wiederholt und ging alles.
war aber eine schwere Geburt.
Beim ersten Versuch bekam ich eine Meldung vom NanoESP, danach niht wieder, aber vom Browser zum Nano klappts…
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.
hi, ich kann die seite „broker.fkainka.de“weder mit Safari, noch mit Mozilla öffnen… Jemand eine Idee woran es liegen kann?
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.
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).
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.
ja, mehrmals
Hmm,
hier klappt es reproduzierbar.
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.
Hi, in welches topic sendest du die Nachricht?
Subscribed to:
NanoESP/18fe34cfa972/test
Published to:
NanoESP/18fe34cfa972/test
I’ll be damned – jetzt geht es plötzlich in beide Richtungen. Irgendwas gemacht?