mafulechka
mafulechka30. September 2019 06:43

Cloud-Anbieter und Telemetrie über Qt MQTT

MQTT ist ein wichtiger Standard für die Telemetrie, insbesondere im IoT-Szenario.


Die Qt Company wird oft von Qt-Kunden und -Benutzern angesprochen, um zu erfahren, wie man sich mit verschiedenen Cloud-Anbietern verbindet und die Liste der Anforderungen möglichst kurz hält.

In diesem Artikel möchte ich weitere Informationen darüber geben, wie Sie eine Verbindung einfach mit Qt erstellen können, ohne Abhängigkeiten von Drittanbietern. Für diesen Vergleich wurden folgende Cloud-Anbieter ausgewählt:

• Amazon IoT-Core
• Microsoft Azure IoT-Hub
• Google Cloud IoT-Core
• Alibaba Cloud IoT-Plattform

Die endgültige Zusammenfassung ist in der folgenden Tabelle zu sehen.

Vorwort

Bevor ich ins Detail gehe, möchte ich Ihre Aufmerksamkeit lenken.

Zunächst liegt der Fokus darauf, Geräte mit der Cloud zu verbinden. Die Fähigkeit, Nachrichten zu senden und zu empfangen, ist der Hauptzweck. In diesem Artikel wird nicht auf die Dienste, Funktionen oder Kosten von Cloud-Anbietern selbst eingegangen, wenn sich Nachrichten in der Cloud befinden.

Die Idee ist auch, nur Qt und/oder Qt MQTT zu verwenden, um eine Verbindung herzustellen. Die meisten, wenn nicht alle Anbieter bieten ein SDK für Geräte oder Überwachungsanwendungen (Web und nativ). Die Verwendung dieser SDKs fügt jedoch zusätzliche Abhängigkeiten hinzu, was zu höheren Speicher- und Arbeitsspeicheranforderungen führt.

Die Reihenfolge, in der die Anbieter in diesem Artikel bewertet werden, basiert auf der öffentlichen Nutzung.

Im Kontakt

Die allerersten Schritte zum Senden von Nachrichten bestehen darin, für jeden Anbieter eine Lösung zu erstellen und dann eine TCP-Verbindung aufzubauen.

Amazon IoT Core

Wir gehen davon aus, dass Sie ein AWS-Konto und einen IoT Core-Service über die AWS-Konsole in einem Browser erstellt haben.

Das Bedienfeld dieses Dienstes sieht folgendermaßen aus:

Die Schaltfläche Erstellen öffnet einen Assistenten, der Sie beim Einrichten Ihres ersten Geräts unterstützt.

Die einzige erforderliche Information ist der Name des Geräts. Alle anderen Elemente können leer gelassen werden.

Der Dienst ermöglicht es Ihnen, automatisch ein Zertifikat für die spätere Verbindung zu erstellen.

Speichern Sie die Zertifikate (einschließlich der Root-CA) und halten Sie sie für die Verwendung durch die Anwendung bereit.

Derzeit ist keine Richtlinie erforderlich. Wir werden uns zu einem späteren Zeitpunkt damit befassen.

Das letzte fehlende Element, das die Implementierung des Beispiels starten sollte, ist der Name des Hosts, zu dem eine Verbindung hergestellt werden soll. Bitte beachten Sie, dass Sie für MQTT das kontospezifische Präfix verwenden müssen. Informationen finden Sie auch auf der Seite AWS IOT Dashboard-Einstellungen.

Mit Qt MQTT wird eine Verbindung mit diesen wenigen Zeilen hergestellt:

const QString host = QStringLiteral("<your-endpoint>.amazonaws.com");

const QString rootCA = QStringLiteral("root-CA.crt");

const QString local = QStringLiteral("<device>.cert.pem");

const QString key = QStringLiteral("<device>.private.key");

QMqttClient client;

client.setKeepAlive(10000);

client.setHostname(host);

client.setPort(8883);

client.setClientId("basicPubSub");

QSslConfiguration conf;

conf.setCaCertificates(QSslCertificate::fromPath(rootCA));

conf.setLocalCertificateChain(QSslCertificate::fromPath(local));

QSslKey sslkey(readKey(key), QSsl::Rsa);
conf.setPrivateKey(sslkey);

client.connectToHostEncrypted(conf);

Für eine erfolgreiche Verbindung sind einige Details wichtig:

• Der Keepalive -Wert muss innerhalb einer bestimmten Schwelle liegen. 10 Sekunden scheinen ein guter Indikator zu sein.
• Port 8883 ist der standardisierte Port für verschlüsselte MQTT-Verbindungen.
• Client-ID muss basicPubSub sein. Dies ist eine gültige Kennung (ID), die während der Erstellung der IoT Core-Instanz automatisch generiert wird.

Microsoft Azure IoT Hub

Zunächst müssen Sie ein Konto für das Azure-Portal erstellen. Auf dem Dashboard müssen Sie eine neue Ressource „Iot Hub“ erstellen.

Anfangs kann das Bedienfeld überwältigend und überwältigend erscheinen, da Microsoft viele Cloud-Dienste und -Funktionen in den Vordergrund stellt. Da der Fokus auf der Verbindung des ersten Geräts liegt, ist es am einfachsten, zu Gemeinsame Zugriffsrichtlinien zu gehen und eine neue Zugriffsrichtlinie mit allen aktivierten Rechten zu erstellen.

Dies ist in einer Produktionsumgebung aus Sicherheitsgründen höchst unerwünscht.

Indem Sie die soeben erstellte Richtlinie auswählen, können Sie die Verbindungszeichenfolge kopieren.

Als Nächstes verwenden wir die Azure Device Explorer-App. Diese App ist perfekt zum Testen. Geben Sie nach dem Start oben in der Bearbeitung des Verbindungstests Verbindungszeichenfolge (Verbindungszeichenfolge) ein und klicken Sie auf Aktualisieren (Aktualisieren) .

Auf der Registerkarte Verwaltung können Sie neue Testgeräte erstellen, die die Authentifizierung über X509 oder Sicherheitsschlüssel angeben. Sicherheitsschlüssel ist die vorausgewählte Standardmethode, die wir anstreben.

Schließlich können Sie mit dem Geräte-Explorer ein SAS-Token erstellen, das zum Konfigurieren des MQTT-Clients erforderlich ist. Token hat die folgende Form:

HostName=<yourIoTHub>.azure-devices.net;DeviceId=<yourDeviceName>;SharedAccessSignature=SharedAccessSignature sr==<yourIoTHub>.azure-devices.net%2F…..

Benötigt nur diesen Teil für die Authentifizierung:

SharedAccessSignature sr==<yourIoTHub>.azure-devices.net%2F…..

Azure IoT Hub verwendet ebenfalls TLS zum Herstellen einer Verbindung. Um die Root-CA (Root Certificate Authority) zu erhalten, können Sie entweder das Azure IoT C SDK klonen oder das DigiCert Baltimore Root Certificate manuell abrufen. Weder die Weboberfläche noch der Geräte-Explorer bieten es an.

Um eine Verbindung von einer Qt-Anwendung mit Qt MQTT herzustellen, lautet der Code wie folgt:

const QString iotHubName = QStringLiteral("<yourIoTHub>");
const QString iotHubHostName = iotHubName + QStringLiteral(".azure-devices.net");
const QString deviceId = QStringLiteral("<yourDeviceName>");

QMqttClient client;
client.setPort(8883);
client.setHostname(iotHubHostName);
client.setClientId(deviceId);
client.setUsername(iotHubHostName + QStringLiteral("/") + deviceId + QStringLiteral("/?api-version=2018-06-30"));
client.setPassword(QLatin1String("SharedAccessSignature sr=<yourIoTHub>.azure-devices.net%2Fdevices…"));

auto caCerts = QSslCertificate::fromData(QByteArray(certificates));
QSslConfiguration sslConf;
sslConf.setCaCertificates(caCerts);

client.connectToHostEncryped(sslConf);

Google Cloud IoT-Core

Nachdem Sie ein Konto für die Google Cloud Platform erstellt haben, bietet die Weboberfläche einen Assistenten zum Starten Ihres ersten Projekts mit Cloud IoT Core.

Nachdem das Projekt erstellt wurde, kann es schwierig sein, Ihre Registrierung zu finden. Die Registrierung speichert alle Informationen über Geräte, Kommunikation, Regeln usw.

Wie in Microsoft Azure werden alle verfügbaren Dienste auf dem Dashboard platziert. Den Punkt IoT Core finden Sie unter Big Data auf der linken Seite.

Nachdem Sie die Google Cloud Platform eine Weile verwendet haben, erweist sich die Suche als sehr hilfreich, um zur Zielseite zu gelangen.

Aus der Registrierung selbst können Sie jetzt neue Geräte hinzufügen.

Die Schnittstelle fragt Sie nach Schlüsseln/Zertifikaten für Ihr Gerät. Aber er hat nicht die Fähigkeit, etwas aus dem Dienst selbst zu erstellen. Es gibt eine Dokumentation, wie man sie erstellt. Und in der Produktionsphase werden diese Schritte wahrscheinlich auf andere Weise automatisiert. Es sind jedoch zusätzliche Schritte erforderlich, um loszulegen, was schwierig sein kann.

Sobald sich Ihr Gerät in der Registrierung befindet, können Sie mit der clientseitigen Implementierung beginnen.

Im Gegensatz zu anderen Anbietern verwendet Google Cloud IoT Core beim Herstellen einer Verbindung kein Gerätezertifikat. Stattdessen wird der private Schlüssel verwendet, um das Passwort zu generieren. Das Passwort selbst muss als JSON Web Token generiert werden. Während JSON Web Tokens ein offener Industriestandard sind, fügt dies Ihrem Projekt eine weitere Abhängigkeit hinzu. Irgendetwas muss in der Lage sein, diese Tokens zu erstellen. Google stellt Beispielcode bereit, es ist jedoch eine Anpassung erforderlich, um ihn in die Anwendung aufzunehmen.

Die Client-ID (ID) für eine MQTT-Verbindung besteht aus mehreren Parametern und hat folgende Form:

projects/PROJECT_ID/locations/REGION/registries/REGISTRY_ID/devices/DEVICE_ID

Basierend auf persönlicher Erfahrung sollte die Groß- und Kleinschreibung berücksichtigt werden. Alles außer der Projekt-ID behält die gleiche Großschreibung wie Ihr Projekt, Ihre Registrierung und Ihr Gerät. Die Projekt-ID wird jedoch in Kleinbuchstaben gespeichert.

Unter Berücksichtigung all dessen sieht die einfachste Implementierung für den Verbindungsaufbau wie folgt aus:

const QString rootCAPath = QStringLiteral("root_ca.pem");
const QString deviceKeyPath = QStringLiteral("rsa_private.pem");
const QString clientId = QStringLiteral("projects/PROJECT_ID/locations/REGION/registries/REGISTRY_ID/devices/DEVICE_ID");
const QString googleiotHostName = QStringLiteral("mqtt.googleapis.com");
const QString password = QByteArray(CreateJwt(deviceKeyPath, "<yourprojectID>", "RS256"););

QMqttClient client;
client.setKeepAlive(60);
client.setPort(8883);
client.setHostname(googleiotHostName);
client.setClientId(clientId);
client.setPassword(password);

QSslConfiguration sslConf;
sslConf.setCaCertificates(QSslCertificate::fromPath(rootCAPath));

client.connectToHostEncrypted(sslConf);

Alibaba Cloud IoT-Plattform

Alibaba Cloud IoT Platform ist das einzige Produkt mit mehreren Optionen: Basic und Professional . Zum Zeitpunkt der Erstellung dieses Artikels scheint sich die Struktur dieses Produkts geändert zu haben. Dies hat jedoch keinen Einfluss auf die hier untersuchten Probleme im Zusammenhang mit MQTT.

Nachdem Sie ein Konto für Alibaba Cloud erstellt haben, können Sie im Webpanel eine neue Instanz der IoT-Plattform erstellen.

Sobald eine Instanz erstellt wurde, können Sie über die Assistentenoberfläche ein Produkt und ein Gerät erstellen.

Von diesen benötigen Sie einige Details, um eine MQTT-Verbindung herzustellen.

• Produktschlüssel
• Produktgeheimnis
• Gerätename
• Gerätegeheimnis

Die Implementierung erfordert einige zusätzliche Schritte. Um alle MQTT-spezifischen Eigenschaften zu erhalten, werden eine Client-ID, ein Benutzername und ein Passwort durch Verkettung und Signierung erstellt.

Dies reicht aus, um eine QMqtt-Clientinstanz zu verbinden.

iotx_dev_meta_info_t deviceInfo;
qstrcpy(deviceInfo.product_key, "<yourproductkey>");
qstrcpy(deviceInfo.product_secret, "<yourproductsecret>");
qstrcpy(deviceInfo.device_name, "<yourdeviceID>");
qstrcpy(deviceInfo.device_secret, "<yourdeviceSecret>");

iotx_sign_mqtt_t signInfo;
int32_t result = IOT_Sign_MQTT(IOTX_CLOUD_REGION_GERMANY, &deviceInfo, &signInfo);

QMqttClient client;
client.setKeepAlive(10000);
client.setHostname(QString::fromLocal8Bit(signInfo.hostname));
client.setPort(signInfo.port);
client.setClientId(QString::fromLocal8Bit(signInfo.clientid));
client.setUsername(QString::fromLocal8Bit(signInfo.username));
client.setPassword(QString::fromLocal8Bit(signInfo.password));

client.connectToHost();

Qt Company verwendet QMqttClient::connectToHostEncrypted() nicht wie alle anderen Anbieter. Alibaba Cloud IoT Platform ist der einzige Anbieter, der standardmäßig eine Nicht-TLS-Verbindung verwendet. Es ist dokumentiert, dass man eine verwenden und auch die RootCA erhalten kann. Dass dies möglich ist, überrascht dennoch.

Standardausgabe (Grenzwerte)

Bisher haben wir mit jedem der IoT-Anbieter eine MQTT-Verbindung aufgebaut. Jeder Anbieter verwendet einen etwas anderen Ansatz für die Geräteidentifikation und -authentifizierung, aber alle diese Dienste entsprechen dem MQTT 3.1.1-Standard.

Entwickler müssen sich jedoch bestimmter Einschränkungen oder Variationen des Standards bewusst sein, um die nächsten Schritte befolgen zu können. Dies wird als nächstes besprochen.

Keiner der Anbieter verfügt über integrierte Unterstützung für Quality-of-Service (QoS) Level 2. Bis zu einem gewissen Grad ist dies sinnvoll, da die Telemetrieinformationen nicht mehrere Schritte erfordern, um die Nachrichtenzustellung zu überprüfen. Ob die Nachricht verarbeitet und validiert wird, ist in diesem Fall nicht von besonderem Interesse, obwohl sich der Entwickler dieser Einschränkung bewusst sein sollte.

Um unsere Erinnerung an die Terminologie aufzufrischen, lassen Sie uns kurz zusammenfassen, was gespeicherte Nachrichten und "Wille-Nachrichten" sind.

Gespeicherte Beiträge werden auf dem Server gespeichert, damit zukünftige Abonnenten über verfügbare Themen auf dem Laufenden bleiben. "Willkommensnachrichten" sind in die Verbindungsanfrage eingebettet und werden nur im Falle einer unerwarteten Trennung vom Client weitergegeben.

Amazon IoT Core

Die Client-ID wird verwendet, um das Gerät zu identifizieren. Wenn das zweite Gerät während des Verbindungsversuchs dieselbe ID verwendet, wird das erste Gerät ohne Benachrichtigung getrennt. Das zweite Gerät wird erfolgreich verbunden, wenn Ihr App-Code eine Art automatische Wiederverbindung enthält, kann dies dazu führen, dass alle Geräte mit derselben Client-ID nicht erreichbar sind.

Gespeicherte Nachrichten werden von AWS nicht unterstützt und der Versuch, eine hinterlassene Nachricht zu senden, führt zum Schließen der Verbindung.

AWS IoT Core unterstützt „Willkommensbotschaften“ innerhalb der zulässigen Themen.

Microsoft Azure IoT Hub

Die Client-ID wird verwendet, um das Gerät zu identifizieren. Das Verhalten zweier Geräte mit derselben ID ist dasselbe wie bei Amazon IoT Core.

Gespeicherte Nachrichten werden in IoT Hub nicht unterstützt. Die Dokumentation besagt jedoch, dass Hub intern ein Flag hinzufügt, um den Server darüber zu informieren, dass die Nachrichten als gespeichert festgelegt wurden.

„Willensbotschaften“ sind zulässig und werden unterstützt, vorbehaltlich thematischer Einschränkungen, die unten erörtert werden.

Google Cloud IoT-Core

Dieser Anbieter verwendet die Client-ID und das Kennwort, um das Gerät erfolgreich zu identifizieren.

Als gespeichert markierte Nachrichten verlieren diese Option während der Zustellung. Laut den Debug-Protokollen werden sie als reguläre Nachrichten gesendet. Es wurde keine Dokumentation gefunden, ob es ähnlich wie Azure IoT Hub funktionieren kann, das diese Anforderung an eine interne Nachrichtenwarteschlange umleitet.

"Will Messages" scheint nicht unterstützt zu werden. Während es möglich ist, eine "Willkommensnachricht" in der Connect-Anweisung zu speichern, wird sie bei gelegentlichen Verbindungsabbrüchen ignoriert.

Alibaba Cloud IoT-Plattform

Das Triplett aus Client-ID, Benutzername und Passwort dient zur Identifizierung des Geräts im Produkt.

Sowohl "hold flag" als auch "will messages" werden serverseitig ignoriert. Eine Nachricht mit der angegebenen Aufbewahrungsdauer wird als normale Nachricht weitergeleitet und geht nach der Zustellung verloren. Will Nachrichten werden ignoriert und während der Verbindung nirgendwo gespeichert.

Verfügbare (benutzerdefinierte) Designs

MQTT verwendet eine Topic-Hierarchie, um einen detaillierten Kontext für Nachrichten zu erstellen. Die Themen ähneln der Verzeichnisstruktur und reichen von generisch bis gerätespezifisch. Ein Beispiel für eine Themenhierarchie wäre
Sensoren / Europa (Europa) / Deutschland (Deutschland) / Berlin (Berlin) / device_xyz / temperature (Temperatur).

Jeder IoT-Anbieter behandelt Themen anders, daher sollten Entwickler mit diesem Abschnitt sehr vorsichtig sein.

Amazon IoT Core

Zunächst müssen Sie prüfen, welche Themes standardmäßig verwendet werden können. Gehen Sie in der Symbolleiste zu * Sicher (Sicherheit) -> Richtlinien (Richtlinien) * und wählen Sie die standardmäßig erstellte Richtlinie aus. Es sollte so aussehen:

AWS IoT Core definiert Richtlinien im JSON-Format und einige der vorherigen Details sind in diesem Dokument aufgeführt. Beispielsweise werden die verfügbaren Client-IDs in der Connect-Ressource angegeben. Außerdem können Sie angeben, welche Themen zum Veröffentlichen, Abonnieren und Empfangen gültig sind. Sie können mehrere Richtlinien haben, die gerätespezifisch sein müssen. Als solches ermöglicht es ein granulares Sicherheitsmodell, bei dem bestimmte Arten von Gruppen unterschiedliche Zugriffsrechte haben.

Beachten Sie, dass die Themenbeschreibung auch Platzhalter zulässt. Sie sollten nicht mit Wildcards im MQTT-Standard verwechselt werden. Das bedeutet, dass Sie "*" anstelle von "#" verwenden müssen, um alle Unterthemen einzuschließen.

Sobald Sie eine Themenhierarchie basierend auf Ihren Anforderungen erstellt haben, ist der Code selbst einfach und sieht folgendermaßen aus:

client.publish(QStringLiteral("topic_1"), "{\"message\":\"Somecontent\"}", 1);
client.subscribe(QStringLiteral("topic_1"), 1);

Microsoft Azure IoT Hub

Der IoT Hub fungiert lediglich als Schnittstelle, um bestehende MQTT-Lösungen mit dem Hub zu verbinden. Der Benutzer darf weder ein benutzerdefiniertes Thema angeben noch eine Themenhierarchie eingeben.

Die Meldung kann nur in folgender Form veröffentlicht werden:

const QString topic = QStringLiteral("devices/") + deviceId + QStringLiteral("/messages/events/");
client.publish(topic, "{id=123}", 1);

Abonnements unterliegen ähnlichen Beschränkungen.

client.subscribe(QStringLiteral("devices/") + deviceId + QStringLiteral("/messages/devicebound/#"), 1);

Der Abonnementplatzhalter wird verwendet, um zusätzliche Informationen abzurufen, die IoT Hub der Nachricht hinzufügen kann. Beispielsweise könnte es sich um eine Nachrichten-ID handeln. Um mehrere Eigenschaften zu kombinieren, wird das Unterthema selbst als URL codiert. Eine vom IoT Hub gesendete Beispielnachricht enthält einen Betreff:

devices/TestDevice01/messages/devicebound/%24.mid=7493c5cc-d783-4ecd-8129-d3c87590b544&%24.to=%2Fdevices%2FTestDevice01%2Fmessages%2FdeviceBound&iothub-ack=full

Google Cloud IoT-Core

Standardmäßig sollte der MQTT-Client dieses Thema zum Veröffentlichen verwenden:

/devices/<deviceID>/events

Es ist aber auch möglich, zusätzliche Themes mit Google Cloud Shell oder anderen APIs hinzuzufügen.

In diesem Fall wurde ein customCross -Design erstellt. Zusätzliche Themen werden als Unterthemen auf der MQTT-Seite wiedergegeben, wenn Sie eine Nachricht zu diesem Thema veröffentlichen, sieht das so aus:

/devices/<deviceID>/events/customCross

Für Abonnements sind keine benutzerdefinierten Designs verfügbar, und es gibt nur zwei verfügbare Designs, die ein Kunde abonnieren kann:

/devices/<deviceID>/commands/#
/devices/<deviceID>/config/

Config-Meldungen sind gespeicherte Meldungen aus der Cloud. Sie werden jedes Mal gesendet, wenn der Client eine Verbindung herstellt, um das Gerät zu synchronisieren.

Alibaba Cloud IoT-Plattform

Themen können auf der Registerkarte "Themenkategorien" in der Produktsymbolleiste einfach verwaltet werden.

Jedes Thema kann zum Empfangen, Senden oder bidirektional konfiguriert werden. Darüber hinaus werden standardmäßig einige zusätzliche Designs generiert, um ein skalierbares Framework zu erstellen.

Beachten Sie, dass der Betreff immer die Geräte-ID enthält. Dies hat Auswirkungen auf die Kommunikationsrouten, wie unten angegeben.

Kommunikationswege

Kommunikation im Kontext von IoT lässt sich in drei Kategorien einteilen:

  1. Gerät zu Cloud (D2C)
  2. Cloud-zu-Gerät (C2D)
  3. Gerät zu Gerät (D2D)

Die erste Kategorie ist die häufigste. Geräte liefern Statusinformationen, Sensordaten oder andere Informationen. Eine Konversation in die andere Richtung findet im Fall der Bereitstellung von Verhaltensanweisungen, der Steuerung von Debug-Ebenen oder allgemeiner Anweisungen statt.

Was die Kommunikation zwischen Geräten betrifft, muss man in diesem Zusammenhang ausführlicher in der Definition sein. Ein typisches Beispiel kommt aus der Heimautomatisierung. Ab einer bestimmten Lichtstärke verteilt der Sensor Informationen und die Jalousien reagieren automatisch mit einem Absenken. Hier werden alle Algorithmen auf Geräten verarbeitet und Cloud-Intelligenz ist nicht erforderlich. Außerdem müssen keine zusätzlichen Regeln oder Filter in der Cloud-Instanz selbst erstellt werden. Außerdem können alle getesteten Anbieter eine Instanz einer Methode erstellen, die in der Cloud funktioniert, und den Befehl dann auf ein anderes Gerät umleiten.

Wir haben die D2C- und C2D-Fälle bereits im vorherigen Abschnitt behandelt. Sobald die Themenhierarchie definiert ist, kann der Client diese Themen veröffentlichen und sie abonnieren.

Um zu überprüfen, ob die C2D-Verbindung funktioniert, wählen Sie die Registerkarte "Test" auf der linken Seite der Symbolleiste. Der Browser zeigt eine minimale Benutzeroberfläche, mit der Sie Nachrichten mit dem angegebenen Betreff senden können.

Auch der Gerät-zu-Gerät-Fall (Gerät-zu-Gerät) wird durch das Abonnieren und Veröffentlichen eines Themas, wie in der Richtlinie angegeben, gut gehandhabt.

Microsoft Azure IoT Hub

Sie können Nachrichten von Ihrem Gerät an die Cloud senden und umgekehrt. Allerdings ist der User nicht frei in der Wahl des Themes.

Für die Übermittlung ist der Geräte-Explorer ein gutes Dienstprogramm, insbesondere zum Testen der Eigenschaften eines Eigenschaftspakets.

Bei Verwendung von Azure IoT Hub ist keine Gerät-zu-Gerät-Kommunikation möglich.

Google Cloud IoT-Core

Es ist möglich, Nachrichten vom Gerät an die Cloud zu senden, was zusätzliche Granularität mit Unterthemen für die Veröffentlichung bietet. Nachrichten werden zu zwei verfügbaren Themen akzeptiert, wie im Abschnitt oben beschrieben.

Da benutzerdefinierte Partitionen immer noch die Geräte-ID enthalten, ist es nicht möglich, eine Google Cloud IoT Core-Instanz als Standard-Proxy für die Geräte-zu-Gerät (D2D)-Nachrichtenweitergabe zu verwenden.

Die Gerätesymbolleiste ermöglicht es Ihnen, einen Befehl sowie eine Konfiguration von der Cloud-Schnittstelle an das Gerät selbst zu senden.

Alibaba Cloud IoT-Plattform

Das Veröffentlichen und Abonnieren kann flexibel über die IoT-Plattform erfolgen. (Unter-)Themen können generiert werden, um mehr Struktur zu schaffen.

Um zu überprüfen, ob eine Nachricht von der Cloud an das Gerät gesendet wurde, enthält Themenliste in der Symbolleiste des Geräts ein Dialogfeld.

Auch die Kommunikation zwischen Geräten ist möglich. Themen für sie können nicht frei definiert werden, sie müssen genau eine Ebene darunter liegen.

/broadcast/<yourProductName>/

Das Thema auf dieser Unterstufe ist frei wählbar.

Empfehlungen und mehr

Amazon IoT Core

• Funktionen von MQTT für AWS.
• Verfügbare Standarddesigns.
• Designleitfaden für Themenhierarchien, auch eine sehr gute Referenz für Nicht-AWS-Projekte.

Microsoft Azure IoT Hub

• Funktionen von MQTT für Azure.

Google Cloud IoT-Core

• Funktionen von MQTT für Cloud IoT Core.
• Generierung von Schlüsseln für Geräte.
• Teams.

Alibaba Cloud IoT-Plattform

• Funktionen von MQTT für die IoT-Cloud-Plattform.
• Verbindungsleitfaden.

Zusätzliche Bemerkungen

MQTT Version 5 (MQTT Version 5) scheint zu jung zu sein, um von großen Anbietern akzeptiert zu werden. Dies ist sehr bedauerlich, da der neueste Standard einige Funktionen hinzufügt, die in der IoT-Welt besonders nützlich sind. Gemeinsame Abonnements bieten einen automatischen Aufgabenausgleich, ein neuer Authentifizierungsbefehl bietet mehr Flexibilität bei der Geräteregistrierung, Verbindungseigenschaften und Nachrichten, wodurch Cloud-Verbindungen leistungsfähiger, einfacher einzuschränken/konfigurieren usw. werden. Aber jetzt müssen wir auf die Annahme warten .

Ich möchte noch einmal betonen, dass die Entwickler keine der Funktionen berücksichtigt haben, die die oben genannten IoT-Lösungen für die Verarbeitung von Nachrichten nach ihrem Empfang bieten. Dies ist Teil einer völlig anderen Studie.

Darüber hinaus wurde die Verwendung von RPC durch Anbieter nicht berücksichtigt. Einige haben fest codierte Themen für die RPC-Handhabung, wie Google, die zwischen Befehlen und Konfiguration unterscheiden. Alibaba verwendet sogar Standarddesigns, um Benachrichtigungen über Firmware-Updates über MQTT zu verarbeiten. TrendMicro hat eine Studie zu Sicherheitsproblemen in MQTT veröffentlicht, und RPC wird dort prominent vorgestellt, eine Pflichtlektüre für jeden, der eine MQTT-Architektur von Grund auf neu einrichtet.

Wie kann ich es selbst überprüfen?

Die Entwickler haben eine Beispielanwendung erstellt, mit der Sie sich mit jedem der aufgeführten Cloud-Anbieter verbinden können, wenn die erforderlichen Informationen verfügbar sind. Die Schnittstelle selbst ist recht einfach:

Letzte Worte

Für jeden breiteren IoT- und Cloud-Dienstanbieter kann eine telemetriebasierte Anwendung mit MQTT (und Qt MQTT) verbunden werden. Jeder von ihnen hat verschiedene Optionen für Verbindungsdetails, einschließlich eines Standards, der Entwicklern vollständig zur Verfügung steht.

Die Entwickler der Qt Company freuen sich auf die Einführung von MQTT Version 5. Der AUTH-Befehl bietet eine bessere Integration von Authentifizierungsmethoden, und andere Funktionen wie Themenaliase und Eigenschaften bringen zusätzliche Anwendungsfälle in die IoT-Welt. Darüber hinaus ist ein gemeinsames Abonnement nützlich, um Beziehungen zwischen Daten und Geräten herzustellen. Dieser letzte Punkt kann für Cloud-Anbieter nützlich sein, da ihr Ziel darin besteht, die Last innerhalb der Cloud zu bewältigen.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken