Diese Dokumentation führt Sie durch die VerbindungMQTT Kundenzu unsMQTT Broker(CrystalMQ) oder Makler von Ihre Wahl mitEclipse Paho CBibliothek, die eine effiziente Kommunikation zwischen Geräten ermöglicht.
Eclipse Paho Embedded C ist für Desktop-Betriebssysteme geeignet, aber vor allem entwickelt für eingebettete Umgebungen wie mbed, Arduino und FreeRTOS.
Bevor MQTT-Clients an den MQTT-Broker angeschlossen werden, stellen Sie sicher, die folgenden Voraussetzungen erfüllt sind:
Eclipse Paho MQTT C Bibliothek
Diese Bibliothek muss im Client-Code enthalten sein:
#include "MQTTAsync.h"
Diese Bibliothek kann aus der Quelle gebaut werden.
Linux/macOS
git clon https://github.com/eclipse/paho.mqt.c.git
cd paho.mqtt.c
machen
sudo make install
Windows
mkdir bauen. Paho
cd bauen. Paho
rufen Sie "C:\Programme (x86)\Microsoft Visual Studio
14.0\VC\vcvarsall.bat" x64
cmake -G "NMake Makefiles" -DPAHO_WITH_SSL=TRUE
-DPAHO_BUILD_DOCUMENT=FALSE -DPAHO_BUILD_SAMPLES=TRUE
-DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=TRUE ..
nmake
Dieser Abschnitt hat Code-Snippets von verschiedenen Möglichkeiten, um mit MQTT zu verbinden Broker. Stellen Sie sicher, dass der MQTT Broker den Verbindungstyp unterstützt, den Sie verwenden möchten. Erhalten Sie auch die entsprechenden Verbindungsparameter des MQTT Broker (Adresse, Port, Benutzername/Passwort, CA Certificate)
MQT Über TCP
Verwenden Sie den folgenden Code, um den Client über TCP zu verbinden. Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.
#definieren ADDRESS "tcp://public-mqtt-broker.bevywise.com:1883"
#definieren CLIENTID "crystamq_testclient"
MQTTAsync Client;
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE,
NULL;
MQTTAsync_connectOptionen conn_opts =
MQTTAsync_connectOptionen_initializer;
int rc;
wenn ((rc = MQTTAsync_connect(client, &conn_opts))) MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to start connect, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
/ Client erstellen
MQTTAsync Client;
MQTTAsync_createOptionen create_opts =
MQTTAsync_createOptionen_initializer;
create_opts.MQTTVersion = MQTTVERSION_5;
int rc = MQTTAsync_createWithOptionen(uclient, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts;
wenn MQTTASYNC_SUCCESS)
{\cHFFFF}
fprintf(stderr, "Failed to create client, return code: %s\n",
MQTTAsync_strerror(rc));
Ausstieg (EXIT_FAILURE)
}
// Client verbinden
MQTTAsync_connectOptionen conn_opts =
MQTTAsync_connectOptionen_initializer5;
wenn ((rc = MQTTAsync_connect(client, &conn_opts))) MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to start connect, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
MQTT über TLS / SSL
Verwenden Sie den folgenden Code, um sicher mit MQTT Broker über TLS zu verbinden. Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.
#define ADDRESS
"ssl://freemqtbroker.sfodo.mqtserver.com:8883"
Setzen Sie TLS-Parameter vor dem Aufruf der MQTTClient_connect an den Client mit dem mQTT Broker sicher über TLS verbinden.
Wenn der MQTT Broker in einem vertrauenswürdigen Server und dem Server gehostet wird Eine Überprüfung ist nicht erforderlich, der folgende Code kann verwendet werden, um TLS-Optionen einzustellen:
MQTTAsync_SSLOptionen ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 0;
ssl_opts.verify = 0;
conn_opts.sl = &ssl_opts;
Wenn der MQTT Broker Server-Zertifikat aus einem Trusted ausgestellt hat CA, dann kann das Server-Zertifikat mit:
MQTTAsync_SSLOptionen ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 1;
ssl_opts.verify = 1;
conn_opts.sl = &ssl_opts;
Hat der MQTT Broker ein selbstsigniertes Serverzertifikat, dann das Serverzertifikat kann mit dem Root-Zertifikat aus dem MQTT überprüft werden Broker:
MQTTAsync_SSLOptionen ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.sslVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 1;
ssl_opts.verify = 1;
ssl_opts.CApath = "./root.crt";
conn_opts.sl = &ssl_opts;
MQTT über WebSocket
Definieren Sie die MQTT Broker Adresse wie diese, um den Client über WebSocket.
#define ADDRESS
"ws://freemqtbroker.sfodo.mqttserver.com:10443"
MQTT über Secure WebSocket
Verwenden Sie den folgenden Code, um den Client über Secure WebSocket zu verbinden. Setzen Sie TLS-Optionen wie in MQTT über TLS Abschnitt angegeben. Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.
#define ADDRESS "wss://public-mqtt-broker.bevywise.com:11443"
MQTT konfigurieren Authentifizierung
Verbindung mit MQTT Broker, die MQTT Username und MQTT benötigt Passwort für die Authentifizierung, fügen Sie Benutzername und Passwort zu den Verbindungsoptionen wie dies:
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE,
NULL;
conn_opts.username = "your-mqtt-username";
conn_opts.password = "your-mqtt-password";
Erweiterte Funktionen
Das letzte Testament einrichten
Konfigurieren derLetzter Wille und TestamentFunktion, um eine Meldung, dass der Broker veröffentlichen wird, wenn der Client unerwartet trennt. Das hilft, andere Abonnenten über den Status des abgeschalteten Clients zu informieren.
Verwenden Sie den folgenden Code, um Last Will in der Verbindung zu setzen Optionen:
MQTTAsync_willOptionen will_opts = MQTTAsync_willOptions_initializer;
will_opts.topicName = "MQTT/Will"; //Dieses zum Thema Ihres
Wahl
will_opts.qos = 0; // Ändern Sie dies zu QoS Ihrer Wahl
will_opts.message = "Unerwartetly Disconnected";
conn_opts.will = &will_opts;
Adjusting Keep Alive
Einstellen derIch bin nicht da.Intervall zu steuern, wie häufig der Client sendet PINGREQ-Nachrichten an den Broker.
Ändern Sie den untenstehenden Code entsprechend Ihren Anforderungen:
MQTTAsync_create(&client, ADDRESS, CLIENTID)
MQTTCLIENT_PERSISTENCE_NONE, NULL;
conn_opts.keepAliveInterval = 20;
Sitzungspersistenz konfigurieren
Sitzungsdaten eines MQTT-Clients beinhalten die Abonnements der Kunde und alle Daten, die der Kunde mit QoS>0 erhalten würde. Der Client kann dieMQT Brokerseine Sitzungsdaten über Verbindungen speichern.
MQTT 3.1.1 Clients können Clean Session = 0 einstellen, um das MQTT zu beantragen Broker hält seine Sitzungsinformationen über Verbindungen gespeichert.
conn_opts.cleansession = 0;
MQT 5 Clients können Clean Start = 0 und Session Expiry festlegen Interval = 'N', um den MQTT Broker zu bitten, seine Sitzungsinformationen gespeichert zu halten über Verbindungen für 'N' Sekunden.
MQTTAsync_connectOptionen conn_opts =
MQTTAsync_connectOptionen_initializer5;
conn_opts.cleanstart = 1;
MQTTProperties props = MQTTProperties_initializer;
MQTTProperty property1
;
Eigenschaft1.identifier = MQTTPROPERTY_CODE_SESSION_EXPIRY_INTERVAL;
Eigenschaft1.value.integer2 = 90;
MQTTProperties_add(&property1);
Maximal Packungsgröße
MQTT5 Client kann den MQTT Broker anfordern, nur Daten zu senden Pakete weniger als eine bestimmte Größe, indem sie so eingestellt werden:
MQTTProperty property2;
property2.identifier = MQTTPROPERTY_CODE_MAXIMUM_PACKET_SIZE;
Eigenschaft2.value.integer4 = 4094;
MQTTProperties_add(&property2);
Daten senden
Effizient Daten an mehrere Abonnenten verteilen, indem sie an benannte Abonnenten publiziert werden Themen mit dem folgenden Code-Snippet:
#definieren TOPIC "device/status"
#define PAYLOAD "ON"
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int rc;
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = 1;
Pubmsg.retained = 0;
geliefert = 0;
wenn ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)))
MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to start sendMessage, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
Pubmsg.retained = 0;
wenn ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &pub_opts)))
MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to start sendMessage, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Festhaltene Nachrichten einstellen
Aktivieren Sie bei der Veröffentlichung einer Nachricht die Rückbeschriftung, um sicherzustellen, dass Broker speichert die letzte Nachricht für jedes Thema. Dies garantiert neue Abonnenten die jüngste Nachricht beim Verbinden erhalten.
Um dies zu implementieren, verwenden Sie den folgenden Code snippet:
Pubmsg.retained = 1
QoS Levels angeben
MQTT bietet drei Ebenen der Qualität des Dienstes (QoS) für die Nachricht Lieferung:
Geben Sie beim Veröffentlichen von MQTT-Nachrichten den erforderlichen QoS-Level an dieser Code:
pubmsg.qos = 1; // Auf 0 oder 1 oder 2 setzen
Nachricht abbrechen Intervall
Die Eigenschaft "Message Ablaufintervall" setzt die Lebensdauer einer Nachricht in Sekunden; wenn innerhalb dieser Zeit nicht ausgesendet, verworfen der Broker es. MQTT5 unterstützt diese Funktion. MQTT5 Clients können dies während der Veröffentlichung von Daten festlegen.
MQTTAsync_responseOptionen pub_opts =
MQTTAsync_responseOptionen_initializer;
pub_opts.context = Client;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTProperty Eigenschaft3;
Eigenschaft3.identifier = MQTTPROPERTY_CODE_MESSAGE_EXPIRY_INTERVAL;
Eigenschaft3.value.integer4 = 90;
MQTTProperties_add(&pub_property3);
pub_opts.properties = pub_properties;
Thema Alias
Die Eigenschaft 'Topic Alias' ermöglicht es Kunden, ein kurzes Alias zu verwenden anstatt eines vollständigen Themennamens, die Reduzierung der Nachrichtenpaketgröße und die Verbesserung des Netzwerks Effizienz.
MQTTAsync_responseOptionen pub_opts =
MQTTAsync_responseOptionen_initializer;
pub_opts.context = Client;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTProperty Eigenschaft3;
Eigenschaft3.identifier = MQTTPROPERTY_CODE_TOPIC_ALIAS;
Eigenschaft3.value.integer2 = 10;
MQTTProperties_add(&pub_property3);
pub_opts.properties = pub_properties;
Eigenschaften, die mit MQTT PUBLISH verbunden sind, verbessern die Nachrichtenbehandlung, Bereitstellung von Kontext oder Anweisungen für Broker und Kunden. Diese Eigenschaften, einschließlich Nachrichten Ablaufintervalle und Thema Alias, optimieren Nachrichtenversand und Netzwerk Bandbreite.
Anmeldung zum Thema Filter
Um von anderen Clients veröffentlichte Daten zu erhalten, muss dieser Client abonnieren Sie ein passendes Thema Filter wie folgt:
#definieren FILTER "Ihr-Topik-Filter"
#define QOS 1
wenn ((rc = MQTTAsync_subscribe(client, FILTER, QOS, NULL))
MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to abonnieren, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Dieses Thema Filter kann mit einem genauen Thema übereinstimmen oder es kann Wildcards wie # und +
Datenerfassung
Um Daten für die Abonnements zu erhalten, eine Callback-Funktion muss so definiert werden:
/*Dieser Callback wird ausgelöst, wenn dieser Client eine Nachricht erhalten hat*/
int msgarrvd(void *context, char *topicName, int topicLen,
MQTTClient_message *message)
{\cHFFFF}
int i;
char* payloadptr;
printf("Message eingetroffen\n");
printf(" Thema: %s\n", topName);
printf("-Nachricht: ");
payloadptr = message->payload;
für(i=0; i
(STÖHNT)
putchar(*payloadptr++)
}
putchar('n');
MQTTClient_freeMessage(&message);
MQTTClient_free(topicName);
Rückgabe 1;
}
MQTTClient_setCallbacks(Client, NULL, NULL, msgarrvd, NULL);
Anmeldung von Themen
Um den Empfang von Updates von einem Thema zu stoppen, verwenden Sie den Code, der bereitgestellt wird, um abbestellen.
#definieren FILTER "Ihr-Topik-Filter"
wenn ((rc = MQTTAsync_unsubscribe(client, FILTER, NULL)))
MQTTASYNC_SUCCESS)
{\cHFFFF}
printf("Failed to abbestellen, return code %d\n", rc);
}
Stellen Sie sicher, dass die Verbindung Ihres Kunden mit dem Broker, um Probleme und Ressourcenlecks auf beiden Seiten zu vermeiden, wodurch System beibehalten Stabilität.
Verwenden Sie den folgenden Code, um den Client vom Broker zu trennen:
MQTTAsync_disconnect(client, NULL);
MQTTAsync_destroy(&client);
Sie haben die Möglichkeit, sich selbst zu entwickeln und anzupassen komplizierte Business-Logik in dieser Umgebung, passgenau auf Ihre spezifischen Bedürfnisse und Ziele.
Kunden-ID-Zuweisung
Geben Sie jedem Gerät eine bestimmte Client-ID zu, um eine genaue Identifizierung zu erhalten. In Privatinstanzen, einzigartige IDs an einzelne Kunden zuweisen, und in gemeinsamen Umgebungen, befestigen Sie eine zufällige String an jeder Client-ID für Einzigartigkeit Zusicherung.
Erstellung von Daten
Organisieren Sie Ihre Datenstruktur mit sorgfältiger Planung. Ob Verwaltung von Klartext, JSON Formatierung, oder numerische Daten, stellen Sie sicher, dass das Design auf die spezifischen Anforderungen angepasst wird Ihre Bewerbung.
Robuste Fehlerbehandlung
Implementieren Sie eine starke Fehlerverwaltung, um MQTT-Verbindungsausfälle zu bewältigen, Abonnement Probleme und Nachrichtenveröffentlichungsfehler effektiv.
Sicherung von Anmeldeinformationen
Schutz sensibler Informationen wie Benutzernamen, Passwörter und Client-IDs, indem Sie sie nicht in Ihrem Quellcode festcodieren. Umweltvariablen verwenden oder sichere Konfigurationsdateien statt.
Regelmäßige Prüfung und Überwachung
Kontinuierlich testen Sie MQTT-Kommunikation und überwachen Sie Client Metriken wie als Verbindungsstatus, Nachrichtendurchsatz und Fehlerraten schnell identifizieren und beheben Probleme.
Optimierung des Sitzungsmanagements
Wählen Sie zwischen sauberen und persistenten Sitzungen (`clean: true` oder `clean: false`) basierend auf Ihrer Notwendigkeit, Abonnements und gelöschte Nachrichten über Kundenverbindungen.
Reconnect auf Disconnect
Reconnect auf Disconnect Code hinzufügen, um zu versuchen, die Verbindung zum MQTT Broker, wenn es ein unerwartetes Ausschalten. Dies wird sicherstellen, dass Ihr Kunde verbunden bleibt und keine Daten.
Den vollständigen Code für den Client herunterladen, der Paho C MQTT Client verwendet Bibliothek zur Verbindung mit unserem Messaging Broker oder einem Broker Ihrer Wahl
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h"
#definieren Sie ADDRESS "tcp://localhost:1883"
#definieren TOPIC "Sensor/Temperatur"
#define PAYLOAD "180"
#define QOS 1
#define TIMEOUT 10000L
int fertig = 0;
Leer generieren_clientid(char *str, int str_length)
{\cHFFFF}
srand(time(NULL));
const char *alphanum =
*PREFIX =
"kristallmq_";
Strncpy(str, PREFIX, strlen(PREFIX));
für (int i = 0; i < (str_length-strlen(PREFIX)); ++i)
str[10 + i] = alphanum[rand() % 62]; // 62 ist die Länge des alphanums
Zeichen
}
Str[str_length] = '\0';
}
Leere onDisconnect(void* Kontext, MQTTAsync_successData* Antwort
{\cHFFFF}
printf("Erfolgsame Trennung\n");
Fertig = 1;
}
Leere auf Abonnieren(void* Kontext, MQTTAsync_successData* Antwort
{\cHFFFF}
printf("Beschreiben Sie erfolgreich\n");
}
ungültig aufConnectFailure(void* Kontext, MQTTAsync_failureData* Antwort
{\cHFFFF}
printf("Connect fail, rc %d\n", Antwort? Antwort>code : 0);
Fertig = 1;
}
Leere onConnect(void* Kontext, MQTTAsync_successData* Antwort
{\cHFFFF}
printf("Erfolgreiche Verbindung\n");
}
int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message
*Nachrichten)
{\cHFFFF}
int i;
char* payloadptr;
printf("Message eingetroffen\n");
printf(" Thema: %s\n", topName);
printf("-Nachricht: ");
payloadptr = message->payload;
für(i=0; i
(STÖHNT)
putchar(*payloadptr++)
}
putchar('n');
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topicName);
Rückgabe 1;
}
int main(int argc, char* argv[])
(STÖHNT)
• Der Kunde
Char-Client[21];
(clientid, 20)
MQTTAsync Client;
MQTTAsync_create(&client, ADDRESS, clientid, MQTTCLIENT_PERSISTENCE_NONE,
NULL;
MQTTAsync_setCallbacks(Client, NULL, NULL, msgarrvd, NULL);
MQTTAsync_connectOptionen conn_opts =
MQTTAsync_connectOptionen_initializer;
conn_opts.keepAliveInterval = 60;
conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect;
Der Präsident Ausfall = onConnectFailure;
conn_opts.context = Client;
int rc;
wenn ((rc = MQTTAsync_connect(client, &conn_opts))) MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failed to start connect, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Schlaf(1);
Ich bin hier.
MQTTAsync_responseOptionen sub_opts =
MQTTAsync_responseOptionen_initializer;
sub_opts.onSuccess = onSubscribe;
sub_opts.context = Client;
wenn ((rc = MQTTAsync_subscribe(client, TOPIC, QOS, Θ_opts)))
MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failing to abonnieren, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Englisch
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
Pubmsg.retained = 0;
wenn (rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, NULL))
MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failed to start sendMessage, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
(!vollendet)
#if definiert(WIN32) || definiert(WIN64)
Schlaf(100)
#else
Verwendungep(10000L)
#endif
MQTTAsync_destroy(&client);
Rückgabe rc;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h"
#definieren Sie ADDRESS "tcp://localhost:1883"
#definieren TOPIC "Sensor/Feuchtigkeit"
#define PAYLOAD "20.3"
#define QOS 1
#define TIMEOUT 10000L
int fertig = 0;
Leer generieren_clientid(char *str, int str_length)
{\cHFFFF}
srand(time(NULL));
const char *alphanum =
*PREFIX =
"kristallmq_";
Strncpy(str, PREFIX, strlen(PREFIX));
für (int i = 0; i < (str_length-strlen(PREFIX)); ++i)
str[10 + i] = alphanum[rand() % 62]; // 62 ist die Länge des alphanums
Zeichen
}
Str[str_length] = '\0';
}
Leere onDisconnect(void* Kontext, MQTTAsync_successData* Antwort
{\cHFFFF}
printf("Erfolgsame Trennung\n");
Fertig = 1;
}
ungültig aufConnectFailure(void* Kontext, MQTTAsync_failureData* Antwort
{\cHFFFF}
printf("Connect fail, rc %d\n", Antwort? Antwort>code : 0);
Fertig = 1;
}
Leere onConnect(void* Kontext, MQTTAsync_successData* Antwort
{\cHFFFF}
printf("Erfolgreiche Verbindung\n");
}
int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message
*Nachrichten)
{\cHFFFF}
int i;
char* payloadptr;
printf("Message eingetroffen\n");
printf(" Thema: %s\n", topName);
printf("-Nachricht: ");
payloadptr = message->payload;
für(i=0; i
(STÖHNT)
putchar(*payloadptr++)
}
putchar('n');
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topicName);
Rückgabe 1;
}
int main(int argc, char* argv[])
(STÖHNT)
• Der Kunde
Char-Client[21];
(clientid, 20)
MQTTAsync Client;
MQTTAsync_createOptionen create_opts =
MQTTAsync_createOptionen_initializer;
create_opts.MQTTVersion = MQTTVERSION_5;
int rc = MQTTAsync_createWithOptionen(Client, ADDRESS, clientid,
MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts;
MQTTAsync_setCallbacks(Client, NULL, NULL, msgarrvd, NULL);
// KONNEKT Eigenschaften
MQTTAsync_connectOptionen conn_opts =
MQTTAsync_connectOptionen_initializer5;
conn_opts.keepAliveInterval = 20;
conn_opts.cleanstart = 1;
conn_opts.onSuccess = onConnect;
Der Präsident Ausfall = onConnectFailure;
conn_opts.context = Client;
MQTTProperties props = MQTTProperties_initializer;
Englisch abbrechen
MQTTProperty property1;
Eigenschaften1.identifier = MQTTPROPERTY_CODE_SESSION_EXPIRY_INTERVAL;
Eigenschaften1.value.integer2 = 90;
MQTTProperties_add(&properties1)
// Maximale Packungsgröße
MQTTProperty property2;
property2.identifier = MQTTPROPERTY_CODE_MAXIMUM_PACKET_SIZE;
Eigenschaften2.value.integer4 = 4094;
MQTTProperties_add(&properties2);
conn_opts.connectProperties = &props
wenn ((rc = MQTTAsync_connect(client, &conn_opts))) MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failed to start connect, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Schlaf(1);
Ich bin hier.
wenn (rc = MQTTAsync_subscribe(client, TOPIC, QOS, NULL))
MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failing to abonnieren, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Schlaf(1);
Englisch
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.payload = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
Pubmsg.retained = 0;
Englisch Sie haben es geschafft
MQTTAsync_responseOptionen pub_opts =
MQTTAsync_responseOptionen_initializer;
pub_opts.context = Client;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTProperty Eigenschaft3;
Eigenschaften3.identifier = MQTTPROPERTY_CODE_TOPIC_ALIAS;
Eigenschaften3.value.integer4 = 90;
MQTTProperties_add(&pub_property3);
pub_opts.properties = pub_properties;
wenn (rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &pub_opts)))
MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failed to start sendMessage, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
Schlaf(1);
wenn (rc = MQTTAsync_unsubscribe(client, TOPIC, NULL)))
MQTTASYNC_SUCCESS)
(STÖHNT)
printf("Failed to abbestellen, return code %d\n", rc);
Ausstieg (EXIT_FAILURE)
}
(!vollendet)
#if definiert(WIN32) || definiert(WIN64)
Schlaf(100)
#else
Verwendungep(10000L)
#endif
MQTTAsync_destroy(&client);
Rückgabe rc;
}
Hier ist, wie dieser C-Client mit gcc-Compiler zu einem ausführbar.
$ gcc -o mqtclient mqtclient.c -lpaho-mqt3a -lpaho-mqt3as
$ ./mqtclient
Verbinden Sie Ihren Kunden mit unserem hochmodernenMQTT Brokeroder einen Broker Ihrer Wahl. Diese leistungsstarke Kombination sorgt für optimale Leistung und Zuverlässigkeit für alle Ihre Messaging braucht, den Weg für eine robuste und effiziente Systemintegration