-
Notifications
You must be signed in to change notification settings - Fork 6
Datenversender MQTT Documentation
Implementierung des MQTT-Protokolls als Versender.
Der Datenversender arbeitet mit dem MQTT-Protokoll und implementiert dieses, um eine Möglichkeit bereitzustellen, Daten zu versenden. Dies geschieht unter Anderem unter der Verwendung von Threads.
Benutzen der Queue und der Konfiguration, um Mittels MQTT Daten versenden zu können.
Initialisieren des Datenversenders:
Ablauf der Threadloop:
typedef struct{
IG_Config * config;
IG_Queue * queue;
IG_Bool running;
pthread_t th_loop;
} IG_Datenversender;
-
config
: Pointer auf IG_Config, stellt die Konfiguration dar, um die es sich handelt. -
queue
: Pointer auf IG_Queue, stellt die Queue bereit. -
running
: Boolscher Ausdruck, um festzuhalten, ob die Thread-Schleife laufen soll oder nicht -
th_loop
: Thread-Variable für den Thread aus Struct
IG_Datenversender * IG_Datenversender_create(IG_Config * config);
Die Funktion sucht nach der Konfiguration mit dem Namen im Parameter und liest diese ein.
Parameter:
-
config
: Beschreibt welche Art von Config eingelesen werden soll.
Rückgabewert: Gibt einen Pointer auf die auf dem Heap erstellte Datenstruktur zurück
void IG_Datenversender_delete(IG_Datenversender * sender);
Die Funktion löscht ein Datenversender-Struct und gibt den benötigten Speicher wieder frei.
Parameter:
-
sender
: Pointer auf das Datenversender-Struct welches gelöscht werden soll
Rückgabewert: Keiner
IG_Status sendData(IG_Datenversender * sender, IG_Data * data);
Gibt IG_Status zurück je nach Erfolg der sendData-Funktion. Übergibt das IG_Data an den Datenversender bzw. an den Thread, welcher diese dann an die Queue pusht.
Parameter:
-
sender
: Das Datenversender-Struct welches benutzt werden soll -
data
: Das Daten-Struct welches benutzt werden soll
Rückgabewert: Es wird der Status zurückgegeben ob alles richtig funktioniert hat.
void* doSomeThing(void *arg);
Stellt die Callback-Funktion für den Thread bei seiner Erstellung dar. Gibt einen void-Pointer zurück. Im Zusammenhang dazu wird ein Struct verwendet, welches als Zusatz zum IG_Datenversender-Struct noch das MQTT-Stack-Struct als Pointer bereitstellt. Diese dosomething-Funktion ist der Kern der noch folgenden init_versender-Funktion. In ihr wird dann tatsächlich die Nachricht auf einem Topic gepublished und die zuvor dokumentierten Funktionen verwendet
Parameter:
-
arg
: void-Pointer der benutzt wird, um die Thread-Parameter verwenden zu können
Rückgabewert: Es wird ein void-Pointer zurückgegeben.
IG_Status init_versender(IG_Datenversender * sender);
Initialisiert die Verbindung zum MQTT-Broker und startet den Thread mit einer Schleife, die sich um die eingehenden Nachrichten kümmert.
Parameter:
-
sender
: Das Datenversender-Struct welches benutzt werden soll
Rückgabewert: Es wird der Status zurückgegeben ob alles richtig funktioniert hat.
void IG_Datenversender_stop(IG_Datenversender * sender);
Stoppt die Thread-Schleife
Parameter:
-
sender
: Das Datenversender-Struct welches benutzt werden soll
Rückgabewert: Keiner
typedef struct{
// MQTT init
MQTTClient client;
IG_UInt32 qos_level;
}IG_Mqtt;
-
client
: Variable, die den Client darstellt, wird zum Erstellen des Clients und zur Verbindung benötigt -
qos_level
: Unsigned Int, für die Definition der Quality of Service bei der Verwendung von MQTT#
IG_Mqtt * IG_Mqtt_create();
Die Funktion stellt den Mqtt-Stack als Struct bereit und gibt diesen zurück, um damit den Clienten zu erstellen und um sich auf ihn zu verbinden.
Parameter: Keiner
Rückgabewert: Gibt einen Pointer auf die auf dem Heap erstellte Datenstruktur zurück
void pubmsg(IG_Mqtt * stack, char * payload, int len, char * topic, int timeout);
Hier wird die Pflicht des Nachrichtenversendens erfüllt. Die Nachricht und das zugehörige Delivery-Token werden initialisiert. Außerdem wird das Level der Quality of Service initialisiert. Die Nachricht wird versendet und es wird auch auf das Acknowledgment bzw. das Beenden des Sendevorgangs gewartet.
Parameter:
-
stack
: Das Mqtt-Struct, welches benutzt werden soll -
payload
: Stellt die Nachricht (JSON) als char-Array dar -
len
: Entspricht der Länge des Char-Arrays‘ Payload -
topic
: Ist auf das zu publishende Topic -
timeout
: Stellt einen Referenzwert dar, nachdem die Verbindung abgebrochen wird
Rückgabewert: Keiner
void disconnect(MQTTClient * client);
Die Verbindung zum Client wird getrennt und der Client wird anschließend zerstört.
Parameter:
-
client
: Pointer auf MQTTClient, damit auf die aktuelle Referenz des Clients zugegriffen werden kann
Rückgabewert: Keiner