MQTT
Client + Server
MQTT (Message
Queuing Telemetry
Transport) ist ein
schlankes Nachrichtenprotokoll, um Informationen innerhalb eines
IoT-Netzwerks (Internet
of Things)
auszutauschen. Dabei dient ein Server, welcher hier Broker
genannt wird als Vermittler zwischen den einzelnen Geräten
(Clients). Ein Gerät das Daten empfangen soll "subscribed" für
ein Topic beim Broker (-> abonniert ein Thema). Das Gerät das
senden soll senden (published) die Information zusammen mit
einem Topic an den Broker. Dieser leitet die Information an alle
Geräte weiter die den Topic subscribed, also das Thema abonniert
haben. Hier auch noch
einmal erklärt, im Zusammenhang mit Arduino + ESP6288,
welcher beim Bau von IoT Sensoren, sowie Aktuatoren eingesetzt
werden kann.
Komponente für Delphi
Die Anzahl an freien MQTT-Komponenten ist sehr begrenzt und
somit wird man früher oder später, zwangsläufig über die TMQTTClient/Server
Komponente stolpern. Der Autor ist nicht im Quellcode benannt,
lediglich der Verweis auf eine URL "http://www.alphaworks.ibm.com/tech/rsmb",
welche mittlerweile jedoch ins Leere läuft. Hier mal eine
Lobeshymne an
WaybackMachine,
die es einem erlaubt einen Blick in die digitale Vergangenheit
werfen und somit auch auf diese Seite :-)
Installation
Die Installation unter D2007 und XE gestaltete sich bei mir
nicht ganz reibungslos. Beim Kompilieren erschien folgende
Meldung:
[DCC Error] MQTTComponents.dpk(30): E2202 Required package 'OverbyteIcsDXeRun'
not found
In diversen Foren liest man dazu nach, dass hier das
ICSv90.Package für Abhilfe sorgen soll, was bei mir jedoch nur
zu weiteren Fehlern führte. Letztlich hatte ich mit dem
ICSv869.Package dann aber doch Erfolg.
Beim Aufrufen der Demo stößt man noch auf eine Anhängigkeit zur
VirtualTreeView-Komponente von JAM-Software.
Um sich das Einsammeln im Netz zu erleichtern gibt es hier die
Links.
Downloads

MQTT Client

Zur Überwachung bzw.
Protokollierung des Clients wird hier im Beispiel eine TMemo
verwendet.
Nachdem die TMQTTClient auf die Form gezogen wurde, kann man bei
den Events OnFailure, OnMon und OnOnline folgenden Code
hinterlegen.
OnOnline:
| |
Memo1.Lines.Add('Client
is online'); |
OnMon:
OnFailure:
| |
Memo1.Lines.Add('----
Failure Reported ' + FailureNames (aReason));
ServerAktiv (false); |
Der Server wird wie folgt
gestartet. bei .Host wird die Adresse des Servers, sprich Broker
eingetragen. Entweder URL bei einem Online-Broker oder die
IP-Adresse wenn der Serve sich im Lokalen Netwerk befindet. Der
Standardport für den Broker ist 1883 und wird bei .Port
angegeben.
| |
TTClient.Host :=
'BrokerAdresse';
TTClient.Port := StrToIntDef ('1883',
1883);
TTClient.Activate (true); |
Um Nachrichten empfangen zu
können muss auch noch mindestens ein Topic abonniert werden, das
geht wie folgt:
| |
var
s: TStringList;
...
s := TStringList.Create;
s.AddObject('MeinTopicName',
TObject (aQos));
TTClient.Subscribe(s);
s.Free; |
Beim Event OnMsg purzeln dann
letztlich die Nachrichten herein und werden wie folg abgerufen:
| |
Memo1.Lines.Add('Msg
on Topic: "' + string (aTopic) +
'"');
Memo1.Lines.Add(aMessage); |
MQTT Server

Aktuell hatte ich noch keinen Bedarf einen Server zu
realisieren, von daher verweise ich an der Stelle mal auf die
Demo, welche sich im Zip-Archiv der Komponente befindet.
Wer einen Raspberry Pi sein Eigen nennt, findet
hier eine
Kurze Anleitung wie man diesen mittels Mosquitto zum MQTT
Broker macht.

|