MQTT und Alternativen zum Datenaustausch

Wir haben seit Februar zur Datenübertragung zwischen Arduino und Raspberry eine WLAN Verbindung und MQTT eingesetzt. Wir haben unsere Erfahrung aus anderen Projekten dazu genutzt um eine erste Lösung zur Komunikation zwischen den beiden Geräten zu etablieren, mit Aussicht auf Integration von Live Ansichten sowie auch von z.B. Web Applikationen und eventuellen Mobilen Applikationen.

„MQTT is a machine-to-machine (M2M)/“Internet of Things“ connectivity protocol.“ mit natürlich Vor- sowie auch Nachteilen wie jede andere Technologie auch.

Wir haben dazu bereits Response aus der Community erhalten, wo dieser Artikel noch als Entwurf vorlag. Daher wollen wir hier (zu einem späteren Zeitpunkt detaillierter) darauf reagieren. Wir werden uns in nächster Zeit ebenso LwM2M ansehen und in einem weiteren Blog-Artikel darüber schreiben ob wir uns für oder gegen einen Wechsel von MQTT zu LwM2M entscheiden und warum.

Zurück zu MQTT und warum wir uns aktuell für eine Umsetzung mit MQTT entschieden haben. MQTT kann man recht einfach erklären, indem man die drei Hauptbestandteile von MQTT betrachtet.

In der Kurzform:

  • Publisher sendet Nachrichten an den
  • Broker, der diese Nachrichten an alle
  • Subsriber weiterleitet, die sich zuvor beim Broker registriert haben.

In der etwas längeren Form erklären wir in den nächsten Kapitel den technischen Aufbau unserer bisherigen Archtitektur.

MQTT Publisher – Arduino als Sensorstation

Wir haben unsere bisherige Arduino Sensorstation Implementierung um das Senden eines JSON Strings erweitert. Der Arduino wird zum Publisher in unserer MQTT Architektur. Wir verwenden einen JSON String als Format zur Übertragung, da es sich um ein gängiges und bekanntes Format handelt und wir in einer Webapplikation den JSON String weiterverwenden können. Am Arduino haben wir dazu sehr simpel einen String zusammengesetzt.

Der Publisher übermitelt an den Broker die Daten und die registrierten Subscriber bekommen die Nachricht dementsprechend weitergeleitet. Wir wollen in einen der nächsten Schritte MQTT Authentifizierung einführen um sicherzustellen, dass nicht jeder Publisher mit dem Broker verbinden kann.

Aktuell gibt es noch Probleme bei der Umwandlung des Strings. Dabei muss derzeit noch auf die Zeichenlänge geachtet werden. Wir werden uns dieses Problem im Laufe der Entwicklung ansehen.

MQTT Broker – Raspberry PI findet einen geeignet Einsatz

Aus unserem letzten Beitrag ist bereits bekannt, dass wir mit Arduino und Sensoren Daten sammeln und unser zentralen Datenspeicher der Raspberry PI ist. Daher wird der Raspberry PI zum MQTT Brokers erweitert. Wir verwenden den MQTT Broker Mosquitto.

Da wir bereits das Senden am Arduino implementiert haben, konnten wir nach der Installation des MQTT Brokers am Raspberry einen ersten Test mit einem Mosquitto Subscriber durchführen.

mosquitto_sub -h localhost -v -t iotairclean

MQTT Subscriber – Python zur weiteren Datenverarbeitung

Zu guter Letzt fehlt uns noch ein MQTT Subscriber, welcher aktuell auf diesem Raspberry PI laufen soll. Es wäre auch möglich die Archtiektur weiter auszudehnen, um Broker und Datenbank sowie Subscriber zu trennen.

Aus unserer letzten Projekterfahrung haben wir Python für eine einfache und sehr simple Umsetzung gewählt. Der MQTT Subscribers vervollständig somit die beschriebene Architektur von MQTT.

Warum eigentlich Python und nicht eine andere Programmiersprache

Wir entwickeln sehr viele Projekte eigentlich mit PHP. Im Laufe der letzten Jahre haben wir uns auch darauf spezialisiert für spezielle Anwendungsfälle passende Bindeglieder zwischen einzelnen Technologien zu identifizieren und zu integrieren. Damit wollen wir möglichst modulare Systeme schaffen, um damit auch performant zu bleiben und gegebenenfalls Technologiewechsel durchführen zu können.

PHP wäre für eine fortlaufende Abarbeitung nicht geeignet. Dazu haben wir bereits Erfahrungen gesammelt, dass es zu Abbrüchen in der Abarbeitung bzw. Problematiken in längeren Laufzeiten führen kann. Java finden wir im Einsatz am Raspberry Pi aufgrund der teilweise notwendigen höheren Performance des ausführenden Geräts nicht geeignet. Mit Python haben wir eine recht hohe Flexibilität in der Entwicklung und Erweiterbarkeit kombiniert mit geringen Resourcenbedarf vorliegen. Daher denken wir, dass in diesem Fall Python eine gute Wahl für die weitere Anwendung und Entwicklung ist. Zumindest wenn es jetzt um den MQTT Subscriber geht.

Die Python Implementierung des Subscribers ist jetzt noch nicht zur Gänze abgeschlossen. Uns fehlt nun auch die Integration der MongoDB Datenbank, die wir im letzten Blog-Eintrag bereits beschrieben haben. Wir wollen ja schließlich unsere Daten nicht nur empfangen sondern auch in der Datenbank „verewigen“ sprich abspeichern. MongoDB bietet dazu eine sehr gute Dokumentation. Mit grundlegenden SQL Kenntnissen der relationalen Datenbanken, ist ein sehr schneller Einstieg möglich. Die grundlegenden Operationen sowie den Aufbau von MongoDB und NoSQL sind mit etwas Datenbank KnowHow schnell verständlich.

Um mit Python auf MongoDB zuzugreifen ist pymongo notwedig.

pip install pymongo

Wir verarbeiten nun den vom Subscriber über den Broker übermittelten JSON String in Python. Abschließend ist noch notwendig, dass unser Python Subscriber automatisch zum Systemstart startet. Wir wollen uns auch hier die Arbeit ersparen, dass wir nach jedem Systemstart die einzelnen Prozesse selbst anstarten müssen.

Daten sammeln und Daten auslesen

Die Kette der Datenübermittlung ist somit abgschlossen. Durch den (Arduino) Publisher gesendete Daten werden vom (Raspberry) Broker an den registrierten (Python) Subscriber übermittelt und weiter verarbeitet.

Parallel zu unsere Blogartikel arbeiten wir bereits an weitere Implementierungen zur Auswertung und ebenso an einer verbesserten Datenkommunikation zwischen Raspberry und Arduino.

Als Zwischenergebnis zur Datenerfassung möchten wir euch von einer Sensorstation übermittelte Daten zusammengefasst darstellen. Aktuell wird die gesamte Anzahl der Datensätze sowie die aktuellsten Werte statisch dargestellt.

Neben unserer recht simplen Testdarstellung arbeiten wir auch bereits an einer interaktiven Darstellung der Messwerte.

Allgemeine Projektinformation

MQTT bietet uns die Möglichkeit mehrere Subscriber sowie auch mehrere Broker einzubinden. Von Webanwendung bis zur Mobilen Applikation können wir live die Daten verarbeiten und benötigen nicht zusätzliche Systemressourcen am Raspberry PI.

Unser nächsten Schritte konzentrieren sich in der Umsetzung einer geeigneten Datenkommunikation, wo wir uns XBee weiter im Detail ansehen werden. Durch unsere zentrale Datenverwaltung wollen wir auch die Datenauswertung ins Auge fassen, um unsere weiteren Projektziele zu verfolgen.

Leave a comment

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