mafulechka
mafulechka10. Juni 2019 04:01

Einführung in QtCoAP

Es ist eine clientseitige Implementierung des Constrained Application Protocol (CoAP) für das Internet der Dinge. Die Bibliothek bietet eine schnelle und einfache Möglichkeit, das CoAP-Protokoll in Ihren plattformübergreifenden Qt-Anwendungen zu verwenden. Wie bereits angekündigt, wird QtCoAP in der neuen Version Qt 5.13 als Teil von Qt for Automation zusammen mit anderen IoT-Protokollimplementierungen wie MQTT, KNX und OPC UA verfügbar sein.


Was ist CoAP?

CoAP wurde als leichtgewichtiges M2M-Kommunikationsprotokoll (Machine-to-Machine) entwickelt, das auf Geräten mit begrenztem Arbeitsspeicher und begrenzten Rechenressourcen ausgeführt werden kann. Es basiert auf dem Konzept von RESTful APIs und ist HTTP sehr ähnlich.

CoAP ist eine Client-Server-Architektur und verwendet GET-, POST-, PUT- und DELETE -Anforderungen, um mit Daten zu interagieren. Aber im Gegensatz zu HTTP verwendet es anstelle von TCP leichtgewichtiges UDP für den Transport. Darüber hinaus unterstützt es einige interessante Funktionen wie Multicast-Anfragen, Ressourcenerkennung und Überwachung.

Aufgrund seiner geringen Kosten und Einfachheit hat sich CoAP zu einem der beliebtesten IoT-Protokolle für die Verwendung auf eingebetteten Geräten entwickelt. Es wirkt wie eine Art HTTP für die eingebaute Welt.

Überblick über die QtCoAP-Implementierung

QtCoAP unterstützt die folgenden Funktionen:

  • Ressourcenüberwachung.
  • Ressourcenentdeckung.
  • Gruppenkommunikation (Multicast).
  • Übersetzungen blockieren.
  • Sicherheit.

Die Bibliothek ist wirklich einfach zu bedienen. Sie müssen nur das Objekt QCoapClient instanziieren und seine Signale verbinden:

QCoapClient client;
connect(&client, &QCoapClient::finished, this, &CoapHandler::onFinished);
connect(&client, &QCoapClient::error, this, &CoapHandler::onError);

Sie können jetzt Anfragen senden und Antworten erhalten:

// GET requests
client.get(QUrl("coap://127.0.0.1:5683/resource"));
// or simply
client.get(QUrl("127.0.0.1/resource"));

// PUT/POST requests
QFile file("data.json");
// ...
client.post(QUrl("127.0.0.1/resource"), file.readAll());
client.put(QUrl("127.0.0.1/resource"), file.readAll());

// DELETE requests
client.deleteResource(QUrl("127.0.0.1/resource"));

Mit der Klasse QCoapRequest können Sie Parameter übergeben und Ihre Anfragen anpassen. Zum Beispiel:

QCoapRequest request;
request.setUrl(QUrl("127.0.0.1"));
request.setPayload(file.readAll());
request.addOption(QCoapOption::UriPath, "resource");
client.put(request);

CoAP bietet auch einen Publish-Subscribe-Mechanismus, der durch „Observe“-Anfragen erreicht wird:

QCoapReply *observeReply = client.observe(QUrl("127.0.0.1/temperature"));
connect(observeReply, &QCoapReply::notified, this, &CoapHandler::onNotified);

Jetzt wird Ihre Anwendung benachrichtigt, wenn sich die Ressource „/temperatur“ („/temperatur“) ändert.

Was CoAP noch interessanter macht, ist die Möglichkeit, CoAP-Ressourcen zu finden und zu entdecken. Sie können Ressourcen auf einem bestimmten Host finden:

QCoapResourceDiscoveryReply
*discoverReply = client.discover(QUrl("127.0.0.1"));

Oder über das Netzwerk:

QCoapResourceDiscoveryReply
*discoverReply = client.discover();

Dadurch wird eine IPv4-CoAP-Multicast-Gruppenerkennungsanforderung gesendet. Sie können die Erkennung auch für IPv6-Hosts ausführen:

discoverReply = client.discover(QtCoap::MulticastGroup::AllCoapNodesIPv6LinkLocal);
// or
discoverReply = client.discover(QtCoap::MulticastGroup::AllCoapNodesIPv6SiteLocal);
...
connect(discoverReply, &QCoapResourceDiscoveryReply::discovered, this, &CoapHandler::onDiscovered);

Sie erhalten mehrere Discovery-Antworten von jedem CoAP-Gerät in Ihrem Netzwerk. Zum Beispiel:

Gastgeber 1:

RES: 2.05 Content
;rt="temperature-c";if="sensor";obs,
;rt="firmware";sz=262144

Gastgeber 2:

RES: 2.05 Content
;rt="temperature-c";if="sensor";obs,

Dies bedeutet, dass es in Ihrem Netzwerk zwei Geräte gibt, auf denen CoAP-Server ausgeführt werden: eines davon ist mit Temperatur- und Lichtsensoren verbunden, das andere ist nur mit einem Temperatursensor verbunden.

Sicherheit

Last but not least ist Sicherheit. Die Qt CoAP-Bibliothek unterstützt die folgenden Sicherheitsmodi:

  • Authentifizierung mit Pre-Shared Keys (Shared Keys).
  • Verwenden Sie X.509-Zertifikate (X.509-Zertifikate).

Um eine CoAP-Verbindung zu sichern, müssen Sie beim Erstellen eines Clients einen dieser Modi durchlaufen und ihn entsprechend konfigurieren. Zum Beispiel:

QCoapClient secureClient(QtCoap::SecurityMode::PreSharedKey);
QCoapSecurityConfiguration config;
config.setIdentity("Client_identity");
config.setPreSharedKey("secretPSK");
secureClient.setSecurityConfiguration(config);
Рекомендуємо хостинг 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
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов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> в заголовочном файле не работает валидатор.
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