Öffnen Sie das MQTT-Clientprojekt auf Delphi. Fortsetzung


Der Anfang war hier: Das MQTT-Protokoll und das offene Projekt des MQTT-Clients auf Delphi

Das Projekt des MQTT-Clients auf Delphi wurde durch ein Dashboard zur Überwachung des Informationsflusses aus dem Internet der Dinge in Echtzeit und einen Generator für periodische Veröffentlichungen zum Testen von MQTT-Brokern ergänzt. Das JSON-Format für die Übertragung von Informationen wurde übernommen, da es der Standard für Internetdienste ist.
Sehen Sie auch, was IBM Bluemix uns für die Organisation der Fernüberwachung und die Verwaltung von Dingen im Internet bieten kann.


Was gibt's Neues


Nachdem die vorherige Version des Clients die Fähigkeit zum Empfangen, Senden und Abonnieren von MQTT-Paketen implementiert hatte, war es an der Zeit, die Nachrichtenflussgenerierung zum Testen des Betriebs von MQTT-Brokern zu implementieren. Eine weitere Aufgabe bestand darin, die Struktur des Nachrichtentexts zu bestimmen. Hier wurde eine Methode zur Strukturierung von Informationen verwendet, die im IBM Bluemix IoTF-Service verwendet wurden. Auch wenn die dort angewandte Strukturierung nicht ideal ist, gibt es Grund, sich für eine Weile an solche Regeln zu halten, da IBM eine sehr maßgebliche Marke ist.
Die Struktur in diesem Zusammenhang ist, wie Informationen in jedem Paket codiert werden und in welcher Zusammensetzung sie übertragen werden. Es muss entschieden werden, ob wir nach einer Variablen oder nach Gruppen übertragen, ob nach Gruppen, wie die Variablen voneinander getrennt werden, wie zwischen Variablen, Metadaten usw. unterschieden wird, wie Variablen mit ihrer Beschreibung oder ihren Namen verglichen werden und ob Variablen in jedem Fall von Namen oder genügend Indizes und begleitet werden müssen usw. Das MQTT-Protokoll regelt dieses Problem in keiner Weise, außer dass die Textdaten im UTF8-Format codiert sind, was im Prinzip auch nicht schlecht ist, da Sie damit Themen auf Russisch aufrufen können.
Internetgiganten haben das JSON-Format gewählt, um das Problem der Strukturierung zu lösen, obwohl MQTT sowohl XML als auch ASN.1 in allen Codierungs- und anderen Formaten stillschweigend übertragen hätte. JSON hat übrigens mehrere Komprimierungsspezifikationen, wenn Beschwerden über die Redundanz des Textformats vorliegen.

Generierung von MQTT-Verkehr


Jetzt kann unser Client Pakete senden, die Textdaten im JSON-Format enthalten und in UTF8 codiert sind. Zu diesem Zweck verfügt es über eine Registerkarte "Periodische Veröffentlichung". Das Veröffentlichen im MQTT-Slang bedeutet einfach das Senden eines Datenpakets an andere Knoten im IoT-Netzwerk.

Im Screenshot entspricht jede Zeile in der Tabelle einer bestimmten Nachricht. Alle Nachrichten in diesem Beispiel haben dasselbe Thema. Hier lautet die Richtlinie: Je weniger verschiedene Themen, desto weniger belastet der Broker das Parsen, Suchen und Speichern dieser Themen. Die Themen werden in dem Format ausgewählt, in dem sie vom IBM Bluemix IoTF-Service akzeptiert werden. Die Spalte Payload enthält den Nachrichtentext. Es wird im JSON-Format dargestellt, aber für eine Variable ist es zulässig, den Formatbezeichner gemäß den Regeln für die Formatfunktion der Delphi-Sprache zu verwenden. In diesem Fall wird der% g-Bezeichner verwendet. An seiner Stelle wird der Wert der Variablen ersetzt, die gemäß den in den Spalten angegebenen Regeln generiert wurde: Zeitüberschreitung (Zeitraum des Sendens der Nachricht), Funktion (es besteht nur die Wahl zwischen einer Zufallsvariablen und einer Sinusfunktion), Min, Max (der minimale und maximale Wert des generierten Werts),Periode (Periode der Sinusfunktion, angegeben in der Anzahl der Abtastwerte), Offs (Versatz des Arguments der Sinusfunktion, angegeben durch die Anzahl der Abtastwerte). Die Spalten QoS und Retain geben die Attribute des MQTT-Pakets an. Das Feld Aktiviert gibt an, ob diese Meldung aktiviert wird, wenn auf die Schaltfläche „Start“ geklickt wird. Die Schaltfläche „Start“ wird erst aktiv, nachdem eine Verbindung mit dem Broker hergestellt wurde.
Wichtig! Der IBM Bluemix IoTF-Dienst reagiert sehr empfindlich auf die Syntax und wird sofort getrennt, wenn das Thema nicht zum Format passt.
Am Ende des Formulars befinden sich die Protokolle: Allgemein, das Protokoll der gesendeten Veröffentlichungsnachrichten und das Protokoll der empfangenen Veröffentlichungsnachrichten. Protokolle können gelöscht oder deaktiviert werden. Das Protokollverbot beschleunigt die Paketerzeugung und den Paketempfang.

Datenvisualisierung von IoT-Knoten




Sie müssen mit einem Abonnement für die Daten beginnen, wenn diese in der vorherigen Sitzung der Kommunikationssitzung nicht dauerhaft abonniert wurden. Andernfalls sendet der Broker nichts.
Auf der Registerkarte "Abonnement nach Liste" müssen Sie die Themen aufzeichnen, die wir vom Broker erhalten möchten. In diesem Fall wird ein Thema geschrieben, dessen Wert vom Generator gesendet wird.
Wenn das Feld Abonnieren markiert ist, wird das Thema abonniert, nachdem Sie auf die Schaltfläche "Abonnieren" geklickt haben. Wenn der Wert des Felds Abonnieren nicht markiert ist, wird das Abonnement von diesem Thema abgemeldet, wenn Sie auf die Schaltfläche "Abonnieren" klicken. Auch hier ist der Abonnementvorgang erst verfügbar, nachdem eine Verbindung mit dem Broker hergestellt wurde.
Noch vor dem Abonnieren können Sie die Variablen, die wir in Echtzeit beobachten möchten, in die Tabelle der visuellen Komponenten schreiben. Klicken Sie dazu auf die Schaltfläche „Tabelle“.


Die Spalte "Variablenname" enthält denselben Variablennamen (Schlüssel in der JSON-Terminologie), der in der Nachricht im JSON-Format aufgezeichnet wurde. Das Feld „Variablenbeschriftung“ enthält den Namen der Variablen, die auf der visuellen Komponente angezeigt wird. In der Spalte "Widget-Klasse" wird der Typ der visuellen Komponente festgelegt. Hier können Sie eine beliebige Skala, Beschriftung oder Grafik im LCD / LED-Stil auswählen.
Klicken Sie nach dem Bearbeiten der Tabelle auf die Schaltfläche Widgets und ordnen Sie die visuellen Komponenten im Formular an. Zunächst befinden sich alle Komponenten in einem Stapel in der oberen linken Ecke. Sie müssen sie in der gewünschten Konfiguration ziehen und auf dem Formular platzieren. Die Position der Komponenten wird nach dem nächsten Öffnen des Formulars gespeichert und reproduziert. Der Komponenten-Docking-Stil folgt dem Stil von IDE RAD Studio oder MS Visual Studio.


Wenn eine Verbindung zum Broker hergestellt und abonniert wird, werden bei Nachrichten mit den entsprechenden Variablen deren Werte sofort im Fenster der visuellen Komponenten angezeigt.

Das Programm speichert alle Einstellungen und Protokolle in JSON-Dateien auf der Festplatte, die manuell bearbeitet werden können.
Das Repository enthält die Version des Programms mit der Konfiguration, die vorbereitet und in JSON-Dateien gespeichert wurde, die zum Testen mit dem lokal enthaltenen Mosquitto-Broker bereit sind.
Der startbereite Broker befindet sich im Repository im Archiv Mosquitto_broker_projs.zip im Verzeichnis Mosquitto_1_4_5_bin. Sie müssen die Datei Run_mosquitto.cmd ausführen.

Informationen zum JSON-Parsing


Das Programm verwendet einen JSON-Parser eines Drittanbieters aus dem Projekt https://github.com/hgourvest/superobject. Obwohl RAD Studio XE8 über einen integrierten JSON-Parser verfügt, schien das Superobject in Bezug auf die Funktionen interessanter und leistungsfähiger zu sein. Wenn eine Nachricht eintrifft, analysiert das MQTT-Clientprogramm den Nachrichtentext und wählt darin einzelne Schlüssel-Wert-Paare aus. Wenn ein Array angetroffen wird, wird es ignoriert, da die Objekte im Array keine Namen haben und es keinen Mechanismus (in diesem Programm) gibt, um sie einer benannten Variablen im Client zuzuordnen. Die verbleibenden benannten Objekte werden rekursiv eingehend gescannt, bis alle Schlüssel-Wert-Paare abgerufen wurden. Der Schlüssel ist der Name der Variablen. Das Programm versucht, die Werte in eine Gleitkommazahl umzuwandeln. Wenn dies fehlschlägt, ist die Zahl gleich Null.

Testen der IBM IoT Real-Time Insights-App


Diese Anwendung ist die zweite von zwei praktischen Anwendungen, die IBM für IoT anbietet. Zunächst wurde die Internet of Things Foundation in einem früheren Artikel erörtert. Der IBM Katalog enthält mehrere weitere Demoanwendungen für IoT. Sie erfordern jedoch die Bereitstellung und den Start von benutzerdefiniertem Code auf dem Server, der automatisch einen Zahlungszähler enthält.
Aber zurück zu IoT Real-Time Insights. Wir gehen auf Ihr Konto. Wählen Sie wie immer die Region US South aus. Klicken Sie im oberen Menü Katalog. Wir gehen ganz nach unten und beobachten viele verschiedene Services und Anwendungen von IBM. Wir sehen:


Klicken Sie auf IoT Real-Time Insights. Mit dieser Anwendung können Sie nur beobachten, dass die direkte Verwaltung von Geräten nicht funktioniert, es sei denn, die Geräte verfügen über andere Kommunikationskanäle als MQTT.
Lassen Sie beim Erstellen des Felds App: Ungebunden. Wir erstellen keine zusätzlichen Anwendungen, da IBM sofort damit beginnt, Geld für sie zu zählen. Feldplan: Lite verlassen. So wird alles für uns kostenlos sein.


Zuvor sollte der Internet of Things Foundation-Dienst bereits erstellt und aktiviert worden sein, und mindestens ein Gerät, für das unser MQTT-Client Pakete sendet, wurde bereits erstellt. Dies wurde in einem früheren Artikel beschrieben.


Auf der Homepage der IoT Real-Time Insights-Anwendung beginnen wir sofort mit dem Verbinden einer Datenquelle. Dies ist der zuvor erstellte Internet of Things Foundation-Dienst. Wir müssen den Codenamen (Organisations-ID), den API-Schlüssel und das Authentifizierungstoken kennen. Wenn wir es nicht wissen, kehren Sie zur Internet of Things Foundation zurück und erstellen Sie das, was wir nicht wissen.
Nach dem Verbinden sollten auf der Registerkarte Geräte alle von uns registrierten Geräte angezeigt werden. In diesem Fall gibt es nur einen.


Dann müssen Sie Nachrichtenschemata konfigurieren. Klicken Sie auf Schemas verwalten und dann auf das Pluszeichen Neues Nachrichtenschema hinzufügen. So können Sie die Einstellung zum Entschlüsseln von Nachrichten vom Gerät verstehen.


Hier ist ein Beispiel für eine solche Einstellung für die Variablen T, L1, L2, L3.


Die Variable L1 wurde beispielsweise beim Bearbeiten durch ein solches Fenster dargestellt.


Nachdem Sie die Schemata konfiguriert haben, können Sie die Analyse konfigurieren. Das heißt, in der Tat die Regeln für das Senden von Nachrichten an externe Nachrichtenempfänger. Am günstigsten ist es, eine E-Mail zu senden.
So sieht die Regel zum Senden von E-Mails aus, wenn die Variable T 24 überschreitet:


Eine solche E-Mail-Nachricht kommt jedoch an:


Der zentrale Punkt der Anwendung sind jedoch die Dashboards. Es kann viele Panels geben. Dashboards bestehen aus visuellen Komponenten, die die Werte von Variablen anzeigen, die auf der Registerkarte "Schemas verwalten" in Echtzeit erstellt wurden. Der folgende Screenshot zeigt ein Beispiel für ein Dashboard zur Anzeige von 4 Variablen: T, L1, L2, L3. Pakete mit variablen Werten wurden von unserem MQTT-Client generiert. Die Variable T wurde als Zufallszahl L1, L2, L3 als Funktion des Sinus erzeugt.


Impressionen von IBM IoT Real-Time Insights.


Bisher ist die Anwendung sehr roh. Fenster und Dialoge werden mit langen Verzögerungen geöffnet. Der Dashboard Builder ist in seiner Funktionalität eingeschränkt. Für einfache Bewegungen oder Größenänderungen müssen Sie mehrere Dialogfelder durchlaufen. Panel-Komponenten selbst haben keine bearbeitbaren Eigenschaften. Gleiches gilt für Grafiken. Diagramme haben keinen Verlauf und werden bei der geringsten Größenänderung des Fensters gelöscht. E-Mails sind nicht stabil und können sich lange verzögern.
Dies ist jedoch ein kostenloser Dienst, der hier und jetzt verfügbar ist. Wenn das Gerät Nachrichten in einem geeigneten JSON-Format veröffentlichen kann, sollten Sie eine solche Anwendung von IBM in Betracht ziehen.

Das MQTT-Clientprojekt befindet sich noch an seinem alten Platz: https://github.com/Indemsys/Delphi_MQTT_mosquitto

Source: https://habr.com/ru/post/de388343/


All Articles