mafulechka
mafulechka10 июня 2019 г. 4:01

Введение в QtCoAP

Это клиентская реализация Constrained Application Protocol (Протокола ограниченных приложений (CoAP)) для Internet of Things (Интернета вещей). Библиотека предоставляет быстрый и простой способ использования протокола CoAP в ваших кроссплатформенных приложениях Qt. Как было объявлено ранее, QtCoAP будет доступен в новом выпуске Qt 5.13 как часть Qt for Automation вместе с другими реализациями протокола IoT, такими как MQTT, KNX и OPC UA.


Что такое CoAP?

CoAP был разработан, как облегченный протокол обмена данными между компьютерами (M2M), который может работать на устройствах с ограниченным объемом памяти и вычислительных ресурсов. Он основан на концепции RESTful APIs и очень похож на HTTP.

CoAP имеет архитектуру «клиент-сервер» и использует запросы GET, POST, PUT и DELETE для взаимодействия с данными. Но в отличие от HTTP, он использует облегченный UDP для переноса вместо TCP. Кроме того, он поддерживает некоторые интересные функции, такие, как многоадресные запросы, обнаружение ресурсов и наблюдение.

Благодаря низким расходам и простоте CoAP стал одним из популярных протоколов IoT для использования на встроенных устройствах. Он действует, как своего рода HTTP для встроенного мира.

Обзор реализации QtCoAP

QtCoAP поддерживает следующие функции:

  • Наблюдение за ресурсами.
  • Обнаружение ресурсов.
  • Групповое общение (многоадресная передача).
  • Блочные переводы.
  • Безопасность.

Библиотека действительно проста в использовании. Вам просто нужно создать экземпляр объекта QCoapClient и подключить его сигналы:

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

Теперь вы готовы отправлять запросы и получать ответы:

// 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"));

Используя класс QCoapRequest , вы можете передавать параметры и настраивать ваши запросы. Например:

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

CoAP также предоставляет механизм публикации-подписки, который достигается с помощью запросов “observe” («наблюдения»):

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

Теперь ваше приложение будет получать уведомления при каждом изменении ресурса “/temperature” («/температура»).

Что делает CoAP еще более интересным, так это возможность находить и открывать ресурсы CoAP. Вы можете найти ресурсы на данном хосте:

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

Или во всей сети:

QCoapResourceDiscoveryReply
*discoverReply = client.discover();

Это отправит запрос на обнаружение многоадресной рассылки IPv4 CoAP multicast group. Вы также можете запустить обнаружение для узлов IPv6:

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

Вы получите несколько ответов об обнаружении от каждого устройства CoAP в вашей сети. Например:

Host 1:

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

Host 2:

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

Это будет означать, что в вашей сети есть 2 устройства, на которых работают серверы CoAP: одно из них подключено к датчикам температуры и освещенности, а другое - только к датчику температуры.

Безопасность

Последнее, но не менее важное - это безопасность. Библиотека Qt CoAP поддерживает следующие режимы безопасности:

  • Аутентификация с помощью pre-shared keys (общих ключей).
  • Использование X.509 certificates (сертификатов X.509).

Для защиты соединения CoAP вам необходимо пройти один из этих режимов при создании клиента и настроить его соответствующим образом. Например:

QCoapClient secureClient(QtCoap::SecurityMode::PreSharedKey);
QCoapSecurityConfiguration config;
config.setIdentity("Client_identity");
config.setPreSharedKey("secretPSK");
secureClient.setSecurityConfiguration(config);
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
m
  • molni99
  • 26 октября 2024 г. 11:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80баллов,
  • Очки рейтинга4
m
  • molni99
  • 26 октября 2024 г. 11:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10

C++ - Тест 003. Условия и циклы

  • Результат:42баллов,
  • Очки рейтинга-8
Последние комментарии
i
innorwall8 ноября 2024 г. 19:51
Django - Урок 036. Как добавить аутентификацию через социальные сети. ВКонтакте buy priligy online usa In addition, it might not be effective at the doses recommended, because of your previous tolerance to a similar type of drug
i
innorwall8 ноября 2024 г. 18:40
Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце priligy results This slowing of eGFR decline was observed in patients with and without low eGFR and in those with and without type 2 diabetes
i
innorwall8 ноября 2024 г. 13:45
QML - Урок 002. Custom Button in QML Android 2007; 14 2 270 83 priligy dapoxetine 60mg Testicular imaging is sort of a unique niche right now, Гў
i
innorwall8 ноября 2024 г. 12:32
C++ - Ускоряет ли сборку #pragma once? It could cause harm to the unborn baby buy generic priligy
Сейчас обсуждают на форуме
i
innorwall8 ноября 2024 г. 18:08
добавить qlineseries в функции School of Nursing, Long Island University, Brooklyn Campus, Brooklyn, NY, USA priligy dapoxetine 30mg
9
9Anonim25 октября 2024 г. 19:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов3 октября 2024 г. 14:05
Реализация навигации по разделам Спасибо Евгений!
F
Fynjy22 июля 2024 г. 14:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Следите за нами в социальных сетях