MQTT-Protokoll und MQTT öffnen Client-Projekt auf Delphi
Das MQTT- Protokoll wird für Nachrichten im Internet der Dinge verwendet. Erstens ist es interessant, weil es von den größten Anbietern von Cloud-Diensten wie IBM, Microsoft und Amazon unterstützt wird.Sie können kostenlos ein Konto bei diesen Diensten einrichten, dort einen Dienst zum Empfangen von MQTT-Nachrichten einrichten und über diese Dienste die Lebensdauer Ihrer Geräte überwachen, z. B. in einem Smart Home. Über diese Dienste können Geräte auch miteinander kommunizieren.Eine Demonstration der Clientverbindung zum MQTT-Service der IBM Bluemix-Cloud ist enthalten.Kurzbeschreibung.
MQTT ist äußerst primitiv: Mit einem kurzen Header ohne Integritätskontrolle werden Struktur, Codierung oder Datenschema nicht eingeschränkt. Die einzige Datenanforderung in jedem Paket besteht darin, dass sie von einer Kennung für den Informationskanal begleitet werden müssen. Diese Kennung in der Spezifikation wird als Themenname oder als einfacheres Thema bezeichnet. Daten werden über TCP an Pakete übertragen. Die Datenmenge in einem Paket kann zwischen einem Byte und 268.435.455 Byte liegen. Sehr flexibel! Obwohl öffentliche Cloud-Dienste strengere Beschränkungen auferlegen, bis zu mehreren Kilobyte.Das MQTT-Protokoll erfordert einen Datenbroker. Dies ist die zentrale Idee der Technologie. Alle Geräte senden nur Daten an den Broker und empfangen auch nur Daten von ihm. Ein Broker ist ein Programm, das als TCP-Server mit einer dynamischen Datenbank fungiert.Insbesondere die Broker-Datenbank enthält eine Tabelle mit allen empfangenen Paketen mit Indizierung nach Themen dieser Pakete. Nach Erhalt des Pakets sendet der Broker es entsprechend seinem Abonnement an alle Geräte im Netzwerk. Damit das Gerät etwas vom Broker erhält, muss es das Thema abonnieren. Themen entstehen dynamisch beim Abonnement oder beim Eintreffen eines Pakets mit diesem Thema. Sie können sich auch vom Thema abmelden. Themen sind daher ein praktischer Mechanismus zum Organisieren von Beziehungen verschiedener Art: eins zu viele, viele zu eins und viele zu viele. Wenn das Paket keinen Abonnenten hat, wird es verworfen. Wenn der Abonnent nicht verbunden ist, wird das Paket entweder sofort in der Datenbank des Brokers gelöscht oder es wartet darauf, dass der Abonnent für eine in der Konfiguration angegebene Zeit eine Verbindung herstellt. Das Verhalten wird durch das QoS-Attribut des Pakets bestimmt.Was ist hier noch wichtig?
• Geräte stellen als erste den Kontakt zu einem Broker her. Das heißt, Geräte befinden sich möglicherweise hinter NATs (Network Address Translators) und haben möglicherweise keine statischen IP-Adressen. Dies beeinträchtigt die Kommunikation nicht.• SSL kann zum Verschlüsseln des Datenverkehrs verwendet werden. Sie können jedoch auch mit IBM Services ohne SSL arbeiten, was das Debuggen erleichtert.• In äußerst schwierigen Fällen können Sie mit MQTT-Brokern über das WebSocket-Protokoll an Port 80 eine Verbindung zu ihnen herstellen.• Der Port des Standard-MQTT-Protokolls kann auch beliebig geändert werden.• Sowohl der Client / die Clients mit einer grafischen Benutzeroberfläche als auch der Broker können sich auf demselben Computer befinden. Das heißt, Die Lösung kann absolut lokal sein und mit einem Klick auf global skaliert werden.• Verschiedene Broker können sich miteinander verbinden, indem sie Nachrichten voneinander abonnieren.• Das Themenkonzept passt gut zur NoSQL-Datenbanktechnologie. Aus dem gleichen Grund ermutigen Cloud-Dienste Benutzer, die JSON-Datencodierung zu verwenden.Projekte öffnen
Die Auswahl an MQTT-Brokern ist ziemlich groß. Seltsamerweise gibt es unter Windows praktisch keine praktischen Clients mit einer Windows-Benutzeroberfläche. Und ein Kunde wie dieser zur Beherrschung des MQTT-Protokolls ist einfach notwendig, da es viele praktische Nuancen der Arbeit der Makler gibt, die über die Spezifikationen hinausgehen, und alle müssen irgendwie untersucht und getestet werden.Es wurde beschlossen, den MQTT-Client auf Delphi zu implementieren.Google for Delphi kann nur die TMQTTClient-Komponente anbieten. Dies ist jedoch eine alte und nicht funktionierende Komponente. Die meisten anderen in Java, Erlang, Haskell und Javscript in Delphi geschriebenen Clients sind sehr schwer zu integrieren.Fand das einzig geeignete Projekt - MosquittoGeschrieben in reinem C-i. Es wird für verschiedene Betriebssysteme kompiliert. Es verfügt über Projektgenerierungsskripte für Visual Studio. Beim Beenden unter Windows erhalten wir DLL-Dateien mit der Implementierung von Client- und Broker-Funktionen. Die Verwendung von C ist in Bezug auf die Geschwindigkeit ermutigend. In C geschriebene dynamische Bibliotheken lassen sich problemlos mit Delphi-Programmen verbinden.Delphi selbst, vertreten durch Embarcadero RAD Studio XE8, ist ein sehr leistungsfähiges Tool zum Erstellen flexibler und praktischer Benutzeroberflächen für Windows, insbesondere wenn es mit DevExpress, TeeChart, RxLib, FireDAC usw. ausgestattet ist.Notwendige Werkzeuge
Wir benötigen die MS Visual Studio 2015- Entwicklungsumgebung . Es wird das Mosquitto- Projekt und alle unterstützenden Projekte zusammenstellen, von denen Mosquitto abhängt . Alternativ kann Mosquitto für Windows mit dem Cygwin- Paket kompiliert werden , Visual Studio schien jedoch praktischer zu sein.Um Visual Studio-Projektdateien zu generieren, müssen Sie das Cmake- Dienstprogramm herunterladen und installieren . Quelle cmake.orgUnd natürlich benötigen Sie RAD Studio XE8 . Darüber hinaus muss RAD Studio installiert sein Paket von Komponenten DevExpress VCL spätere Version 14.2.2. Obwohl dies nicht von grundlegender Bedeutung ist, kann das Design der Benutzeroberfläche für Standard-RAD Studio-Komponenten problemlos neu erstellt werden.Verfahren zur Softwareinstallation
Mosquitto hängt von mehreren Projekten von Drittanbietern ab . Dies sind:• OpenSSL v 1.0.2e . Quelle - http://slproweb.com/download/Win32OpenSSL-1_0_2e.exe• Pthreads v 2.9.1 . Quelle - ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip• Libwebsockets v 1.4 . Quelle - https://github.com/warmcat/libwebsocketsLaden Sie diese Projekte herunter.Wir kompilieren OpenSSL nicht , sondern nehmen sofort die beiden erforderlichen Dateien von dort: libeay32.dll und ssleay32.dll aus dem bin- Verzeichnis . Es kommt häufig vor, dass sie bereits aus anderen Projekten auf dem Computer installiert sind. Dies muss überprüft werden.PthreadsWir kompilieren auch nicht, sondern nehmen die bereits kompilierte Datei pthreadVC2.dll aus dem Verzeichnis dll \ x86 .Libwebsockets wird ohne vorkompilierte Dateien und ohne Projekt für Visual Studio geliefert , verfügt jedoch über eine Konfigurationsdatei CMakeLists.txt . In diesem Fall generieren wir mit dem Dienstprogramm Cmake die Visual Studio-Projektdatei in einem separaten Verzeichnis (libwebsockets_VS_proj-Verzeichnis). Öffnen Sie anschließend die generierte Projektdatei in Visual Studio, das wir kompilieren. Wir erhalten die Datei websockets.dll, die wir benötigen .Nach allen vorherigen Schritten können Sie das Mosquitto- Projekt kompilieren. Hier müssen Sie auch zuerst die Visual Studio-Projektdatei (Mosquitto_VS_proj-Verzeichnis) aus der angehängten Konfigurationsdatei CMakeLists.txt generieren . Das generierte Projekt funktioniert nicht ganz. Sie müssen die Pfade zu einigen externen Header-Dateien und -Bibliotheken ändern, einige Makros in das Projekt aufnehmen und den Quellcode etwas ändern. Als Ergebnis erhalten wir die Datei mosquitto.dll .Der Einfachheit halber sind alle Dateien und die Verzeichnisstruktur mit den genannten Projekten in der Archivdatei enthalten, die dem Artikel beigefügt ist.Zusammen mit der Clientbibliothek erhalten wir beim Kompilieren des Mosquitto- Projekts die ausführbare Datei des MQTT-Brokers - mosquitto.exe .Somit erhalten wir sofort sowohl den Kunden als auch den MQTT-Broker, d.h. Fast alles, was Sie brauchen, um ein effektives Internet der Dinge zu organisieren.Erstellen eines MQTT-Client-Projekts in Delphi
Um die Bibliothek mosquitto.dll in Delphi zu integrieren, müssen Sie ein Modul für Bibliotheksfunktionsdeklarationen in Object Pascal erstellen . Um dies zu tun, wird die Datei Konvertierung durchgeführt wurde mosquitto.h Datei MOSQUITTO.PAS .Das Client-Projekt ist sehr einfach und besteht aus nur 4 Quelldateien. Der Client zeigt die Verbindung und Trennung, die Bildung des Willen ( Will ), Datenpaket - Sende PUBLISH broker, Empfangen von Datenpaketen PUBLISH von einem Broker - Abonnement und Abmelden.Das Programm speichert alle Verbindungsattribute, auf die sich der Begriff Profil bezieht, in der auf der Festplatte gespeicherten Profiltabelle. Die Protokolle der empfangenen und gesendeten PUBLISH- Pakete werden ebenfalls separat auf der Festplatte gespeichert .Kundennutzungsmethode
Führen Sie die Datei TMQTTC.exe aus .Um jemanden zu haben , den Testlauf Broker Team zu kommunizieren Run_mosquitto.cmd im Verzeichnis Mosquitto_1_4_5_bin . Der Broker ist so konfiguriert, dass eine Verbindung ohne SSL- und Kennwortüberprüfung hergestellt werden kann.Füllen Sie die Felder wie im Screenshot aus.
Passwort und Benutzername sind optional. Klicken Sie im Navigator auf die Schaltfläche Festschreiben, um die Daten in der Tabelle zu speichern. Klicken Sie dann auf die Schaltfläche Verbinden .Nach der Verbindung werden Veröffentlichungs- und Abonnementbefehle verfügbar. Befehle PING Client mosquitto generiert automatisch.Damit der Client etwas erhält, sollten Sie das Programm TMQTTC.exe erneut mit einer anderen Client- ID ausführen und einen Client abonnieren, um Daten von einem anderen zu empfangen.Stellen Sie eine Verbindung zu IBM Bluemix her
Das erste, was Sie tun müssen, ist, ein Konto in Bluemix zu erstellen.Nachdem Sie ein Konto erhalten haben, gehen wir zu unserem Control Panel auf Bluemix . Hier müssen Sie sofort in die Region Süd der USA wechseln . Klicken Sie dazu auf das Kontosymbol in der oberen rechten Ecke und ändern Sie den Wert im Feld Region . Insgesamt gibt es drei Regionen, aber der Süden der USA bietet die Möglichkeit, die meisten Dienstleistungen zu nutzen. Erstellen Sie als Nächstes Space . Der Bildschirm sollte unten wie ein Crinshot aussehen. Hier werden die Organisation INDEMSYS und Space INDEMSYS SPACE erstellt .
Klicken Sie nun im oberen Menü auf KATALOG . Wir gehen nach unten und wählenInternet der Dinge-Stiftung .
Wir ändern die vorgeschlagenen Felder nicht standardmäßig und klicken auf Internet of Things Foundation erstellen. Dies ist ein Dienst, der den MQTT- Broker und die dazugehörige Benutzeroberfläche enthält. Klicken Sie nach dem Erstellen im angezeigten Fenster auf die Schaltfläche Dashboard starten . Dies ist ein IoT-Bedienfeld. Jetzt müssen wir Geräte erstellen. Klicken Sie auf Gerät hinzufügen . Erstellen Sie in den angezeigten Dialogfeldern einen Gerätetyp ( Gerätetyp erstellen ). Geben Sie ihm den Namen Typ1, und füllen Sie die verbleibenden Felder der Einfachheit halber nicht aus. Klicken Sie auf Weiter -> Weiter -> Erstellen -> Weiter. Geben Sie dem Gerät Device1 den Namen. Weiter Weiter -> Weiter -> Weiter -> Hinzufügen. Als Ergebnis erhalten wir das folgende Fenster:

Hier haben wir alle Details zum Anschließen unseres ersten Geräts an den MQTT- Broker Bluemix .Wir werden testen, ob unser Client eine Verbindung herstellen kann. Geben Sie die Details in das Client-Fenster ein.
Wie Sie sehen, hat der Client erfolgreich eine Verbindung zu Bluemix hergestellt . Hier sollten Sie auf den Hostnamen achten. Es beginnt mit der Organisations-ID, die beim Erstellen der Internet of Things Foundation erhalten wurde . Das Feld Benutzer-ID ist ebenfalls zusammengesetzt und wird wie folgt codiert: d : < Organisations-ID >: < Gerätetyp >: < Gerät-ID >. Das Feld Benutzername enthält eine feste Zeichenfolgeuse-token-auth .Nachrichtenthemen für den Bluemix- Broker dürfen im Gegensatz zum Mosquitto- Broker keine beliebigen Daten enthalten. Sie werden nach bestimmten Regeln codiert. Diese Regeln sollten in der Dokumentation der Internet of Things Foundation untersucht werden . Der Screenshot zeigt eines der möglichen gültigen Themen.Projekt-Repository: https://github.com/Indemsys/Delphi_MQTT_mosquittoSource: https://habr.com/ru/post/de388231/
All Articles