Главная  /  Программа «Smacont-ESP»  /  Протокол MQTT

Протокол MQTT


Содержание

Общие данные
MQTT брокеры
Действия, для работы по протоколу MQTT
Действие «mqtt_Connect()»
Действие «mqtt_Disconnect()»
Действие «mqtt_SendRaw3()»
Действие «mqtt_SendRaw6()»
Действие «mqtt_SendRawTextArr()»
Действие «mqtt_SendText3()»
Действие «mqtt_SendJson()»
Действие «mqtt_SendJsonArrVxText()»
Действие «mqtt_SendJsonArrVx()»
Действие «mqtt_SendJsonArrText()»
Прием данных от брокера
Сообщения, формируемые устройством при работе по протоколу MQTT



Общие данные

MQTT (Message Queuing Telemetry Transport) — упрощённый сетевой протокол, работающий поверх TCP/IP, ориентированный на обмен сообщениями между устройствами по принципу «издатель — подписчик».


Smacont. MQTT

MQTT

Протокол ориентируется на простоту в использовании, невысокую нагрузку на каналы связи, работу в условиях постоянной потери связи, лёгкую интеграцию в любую систему. Основное предназначение — работа с телеметрией от различных датчиков и устройств.

Использование шаблона подписчика обеспечивает возможность устройствам выходить на связь и публиковать сообщения, которые не были заранее известны или предопределены, в частности, протокол не вводит ограничений на формат передаваемых данных.

Основные особенности протокола MQTT:
- Асинхронный протокол;
- Компактные сообщения;
- Работа в условиях нестабильной связи на линии передачи данных;
- Поддержка нескольких уровней качества обслуживания (QoS);
- Легкая интеграция новых устройств.

Принцип работы протокола и серверов (брокеров) не рассматривается, дополнительную информацию можно получить на других сайтах.



MQTT брокеры

Брокер MQTT – это серверная система, которая координирует сообщения между разными клиентами. Брокер отвечает, в частности, за получение и фильтрацию сообщений, идентификацию клиентов, подписанных на каждое сообщение, и отправку им сообщений.

Также он отвечает за выполнение некоторых других задач, например:
- авторизацию и аутентификацию клиентов MQTT;
- передачу сообщений другим системам для дальнейшего анализа;
- обработку пропущенных сообщений и клиентских сеансов.

В качестве брокеров можно выделить следующие сервисы:
- wqtt.ru (бесплатно 1 месяц, далее по подписке);
- dealgate.ru (бесплатно).

Облачный MQTT брокер wqtt.ru

WQTT.RU-это идеальное решение для обмена сообщениями "IoT" между маломощными датчиками или мобильными устройствами, такими как телефоны, встроенные компьютеры или микроконтроллеры.

Работает с Алисой.

Облачный MQTT брокер dealgate.ru

Сервис предназначен для интеграции с оборудованием, управляемым по широко известному в среде энтузиастов разработчиков MQTT протоколу. Позволяет добавлять, удалять и настраивать виртуальные устройства, которые впоследствии могут быть сопряжены с реальными, для чего реализован собственный MQTT сервер. Доступен контроль из Панели управления или голосом через навык Алисы Dealgate и приложение Умный Дом от Яндекса. Предоставляется возможность создания собственных сценариев автоматизации и оповещения на Телеграмм. Управляющие и телеметрические данные фиксируются в базе данных и могут быть представлены в графической форме.

Работает с Алисой.



Действия, для работы по протоколу MQTT

Для работы по протоколу MQTT, в прошивке «Smacont-ESP» предусмотрены следующие действия:
- «mqtt_Connect()» (подключение к MQTT-серверу);
- «mqtt_Disconnect()» (разорвать соединение с MQTT-сервером)
- «mqtt_SendRaw3()» (отправить переменные по MQTT-протоколу с указанием имени топиков (x3))
- «mqtt_SendRaw6()» (отправить переменные по MQTT-протоколу без исп. имени топиков (x6))
- «mqtt_SendRawArr()» (отправить массив переменных по MQTT без исп. имени топиков (до 16 «Vx»))
- «mqtt_SendJson()» (отправить переменные по MQTT в json-формате «topic={"name":Vx,"name":Vx} (x2))
- «mqtt_SendJsonArrVxText()» (отправить массив переменных и «Text» по MQTT в json-формате «topic={"name":Vx,"name":Vx,"name":"Text","name":"Text"}» (до 16 «Vx» и 16 «Text»))
- «mqtt_SendJsonArrVx()» (отправить массив переменных по MQTT в json-формате «topic={"name":[Vx,Vx,Vx]}» (до 16 «Vx»));
- «mqtt_SendJsonArrText()» (отправить массив «Text» по MQTT в json-формате «topic={"name":["Text","Text"]}» (до 16 «Text»));
- «mqtt_SendText3()» (отправить текст по MQTT (x3));


Smacont. Действия, для работы по протоколу MQTT

Действия, для работы по протоколу MQTT




Общие параметры для действий

Большинство действий, для работы по протоколу MQTT, имеют общие параметры.


Smacont. Общие параметры

Общие параметры

Параметр «Хранение на сервере (RETAINED)». Если данный параметр установлен в состояние «true», то сообщение будет храниться в брокере, а новые подключенные клиенты будут получать данный пакет сразу же при подписке.

Параметр «Использование префикса (prefix)». Данный параметр позволяет отключать использование общего префикса для имени топика. Общий префикс отключается только для топиков, указанных в данном действии.



Действие «mqtt_Connect()»

Запуск действия инициирует подключение к MQTT-серверу.

Действие необходимо выполнять в сценариях ОДНОКРАТНО! Циклический запуск действия может привести к перезагрузке устройства.

Перед редактированием параметров действия «mqtt_Connect()», необходимо заполнить шаблоны (см. рис. ниже), в которых содержится следующая информация:
- URL-адрес брокера/сервера, 5…32 лат.сим. (шаблон Т21);
- Имя пользователя, 8…16 лат.сим. (шаблон Т22);
- Пароль, 8…16 лат.сим. (шаблон Т23);
- Префикс топиков для «публикации», 3…32 лат.сим., без символа «/» в конце (шаблон Т24). Необязательный параметр;
- ID клиента, 5…16 лат.сим. (в данном примере не используется). Необязательный параметр;
- Префикс топиков для «подписки», 3…32 лат.сим., без символа «/» в конце (шаблон Т25). Необязательный параметр.


Smacont. Пример шаблонов для действия «mqtt_Connect()»

Пример шаблонов для действия «mqtt_Connect()»

ПРИМЕЧАНИЯ.
1. Необходимо соблюдать порядок следования параметров в шаблонах.
2. Шаблоны, содержащие параметры действия «mqtt_Connect()», должны располагаться друг за другом.


Smacont. Действие «mqtt_Connect()»

Действие «mqtt_Connect()»

По завершению редактирование параметров действия «mqtt_Connect()», необходимо либо выполнить данное действие в ручном режиме (путем нажатия иконки ), либо выполнить перезагрузку устройства.

Так как у действия «mqtt_Connect()» нет автозагрузки, его рекомендуется запускать в сценарии «start».

Начальный номер шаблонов «Tx»

Параметр указывает на начальный номер шаблона, где содержится информация для подключения к MQTT-серверу (см. рис. выше «Пример шаблонов для действия «mqtt_Connect()»).

URL-адрес брокера/сервера

Параметр содержит URL-адрес брокера/сервера.
Обязательный параметр.
Допустимая длина параметра: 5…32 латинских символа.
Данная информация указывается в личном кабинете на брокере/сервере, к которому осуществляется подключение.

Имя пользователя

Параметр содержит имя пользователя.
Обязательный параметр.
Допустимая длина параметра: 8…16 латинских символа.
Данная информация указывается в личном кабинете на брокере/сервере, к которому осуществляется подключение.
НЕ ПЕРЕДАВАЙТЕ ДАННУЮ ИНФОРМАЦИЮ ДРУГИМ ЛИЦАМ.

Пароль

Параметр содержит пароль для подключения к брокеру/серверу.
Обязательный параметр.
Допустимая длина параметра: 8…16 латинских символа.
Данная информация указывается в личном кабинете на брокере/сервере, к которому осуществляется подключение.
НЕ ПЕРЕДАВАЙТЕ ДАННУЮ ИНФОРМАЦИЮ ДРУГИМ ЛИЦАМ.

ID клиента

Параметр содержит ID клиента (устройства).
Допустимая длина параметра: 5…16 латинских символа.

ОБЯЗАТЕЛЬНОЕ УСЛОВИЕ: ID клиента должен быть уникальным для каждого устройства.

По умолчанию, в качестве ID клиента используется серийные номер устройства. При необходимости, можно задать другой ID клиента используя шаблоны (см. рис. выше «Пример шаблонов для действия «mqtt_Connect()»).

Порт

Параметр содержит номер порта для подключения к брокеру/серверу.
Обязательный параметр.
В качестве значения используется заранее определенная константа.
Допустимые значения: 0…65535.
Данная информация указывается в личном кабинете на брокере/сервере, к которому осуществляется подключение.

Топики для «публикации» (устройство -> СЕРВЕР)

Параметр содержит префикс топиков для «публикации».
Необязательный параметр.
Допустимая длина параметра: 3…32 латинских символа.
Указывается без символа «/» в конце.

Параметр является общим для всех топиков для «публикации».

Для удобства отслеживания, от какого устройства происходит публикация данных, в имени топика рекомендуется использовать имя устройства.

Топики для «подписки» (сервер -> УСТРОЙСТВО)

Параметр содержит префикс топиков для «подписки».
Необязательный параметр.
Допустимая длина параметра: 3…32 латинских символа.
Указывается без символа «/» в конце.

Параметр является общим для всех топиков для «подписки».

Для удобства, в имени топика рекомендуется использовать имя устройства.

Информация о текущем сост. MQTT

Параметр содержит информацию о текущем состоянии работы по протоколу MQTT.
Необязательный параметр.
Для использования данного параметра необходимо указать начальный адрес «Vx».

Список значений:
-4: сервер не ответил в течение заданного времени (timeout) (MQTT_CONNECTION_TIMEOUT);
-3: сетевое соединение было прервано (MQTT_CONNECTION_LOST);
-2: сетевое соединение не удалось (MQTT_CONNECT_FAILED);
-1: клиент отключен (MQTT_DISCONNECTED);
0: клиент подключен (MQTT_CONNECTED);
1: сервер не поддерживает запрошенную версию протокола MQTT (MQTT_CONNECT_BAD_PROTOCOL);
2: сервер отклонил идентификатор клиента (MQTT_CONNECT_BAD_CLIENT_ID);
3: сервер не смог принять соединение (MQTT_CONNECT_UNAVAILABLE);
4: имя пользователя/пароль были отклонены (MQTT_CONNECT_BAD_CREDENTIALS);
5: клиент не авторизован для подключения (MQTT_CONNECT_UNAUTHORIZED).

Счетчик подключений

Параметр содержит количество подключений (переподключений) к серверу.
Необязательный параметр.
Для использования данного параметра необходимо указать начальный адрес «Vx».

Счетчик подключений с ошибкой

Параметр содержит количество подключений (переподключений) к серверу с ошибкой.
Необязательный параметр.
Для использования данного параметра необходимо указать начальный адрес «Vx».



Действие «mqtt_Disconnect()»

Выполнение действия разрывает соединение с MQTT-сервером.

Данное действие рекомендуется применять для подключения к резервному брокеру. Например, на устройстве используется алгоритм работы с двумя брокерами и при потере связи с основным брокером, выполняется действие «mqtt_Disconnect()», а затем осуществляется подключение к резервному брокеру при помощи действия «mqtt_Connect()» (и наоборот).


Smacont. Действие «mqtt_Disconnect()»

Действие «mqtt_Disconnect()»





Действие «mqtt_SendRaw3()»

Выполнение действия позволяет отправить до трех значений переменных по MQTT-протоколу с указанием имени топиков.


Smacont. Действие «mqtt_SendRaw3()»

Действие «mqtt_SendRaw3()»

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




Действие «mqtt_SendRaw6()»

Выполнение действия позволяет отправить до шести значений переменных по MQTT-протоколу без указания имени топиков.

Переменные могут располагаться в произвольном порядке.


Smacont. Действие «mqtt_SendRaw6()»

Действие «mqtt_SendRaw6()»





Действие «mqtt_SendRawTextArr()»

Выполнение действия позволяет отправить массив переменных (до 16-ти значений) и/или массив текстовых сообщений (до 16-ти сообщений) по MQTT-протоколу.

Переменные должны быть расположены друг за другом.


Smacont. Действие «mqtt_SendRawTextArr()»

Действие «mqtt_SendRawTextArr()»





Действие «mqtt_SendJson()»

Выполнение действия позволяет отправить переменные по MQTT в json-формате «topic={"name":Vx,"name":Vx}.


Smacont. Действие «mqtt_SendJson()»

Действие «mqtt_SendJson()»





Действие «mqtt_SendJsonArrVxText()»

Выполнение действия позволяет отправить массив переменных (до 16-ти значений) и/или массив текстовых сообщений (до 16-ти сообщений) по MQTT-протоколу в json-формате.


Smacont. Действие «mqtt_SendJsonArrVxText()»

Действие «mqtt_SendJsonArrVxText()»





Действие «mqtt_SendJsonArrVx()»

Выполнение действия позволяет отправить массив переменных по MQTT в json-формате «topic={"name":[Vx,Vx,Vx]}» (до 16 «Vx»).


Smacont. Действие «mqtt_SendJsonArrVx()»

Действие «mqtt_SendJsonArrVx()»





Действие «mqtt_SendJsonArrText()»

Выполнение действия позволяет отправить массив «Text» по MQTT в json-формате «topic={"name":["Text","Text"]}» (до 16 «Text»).


Smacont. Действие «mqtt_SendJsonArrText()»

Действие «mqtt_SendJsonArrText()»





Действие «mqtt_SendText3()»

Выполнение действия позволяет отправить текст по MQTT (до 3 «Text»).


Smacont. Действие «mqtt_SendText3()»

Действие «mqtt_SendText3()»





Прием данных от брокера

Прием данных от брокера происходит в фоновом режиме.

Для отправки данных от брокера необходимо использовать топик следующего вида:
prefix/Vx
где:
prefix - префикс топиков для «подписки» (сервер -> УСТРОЙСТВО).
Vx - переменная, в которой будет сохраняться значение, «х» - номер переменной. Регистр символа «V» не имеет значения («V» или «v»).

Пример
kitchen/sub/V122 = 123.45 (записать в переменную «V122» значение 123.45)
kitchen/sub/v7 = 54321 (записать в переменную «V1» значение 54321)



Сообщения, формируемые устройством при работе по протоколу MQTT

При работе по протоколу MQTT, устройство формирует сообщения в «Журнал». Для этого необходимо выполнить действие «log_SetParam()», в котором разрешается логирование событий MQTT.



Программы

Прошивка «Smacont-ESP»:
скачать

«Программа Настройки»:
запусить (только браузер Firefox)
скачать zip-архив

Телеграм канал

Новости

Энергонезависимая память (EEPROM)

Переменные «Vx» (карта переменных «Vx»)

WEB-интерфейс

Действие «wifi_CheckConn()». После подключения к WiFi-сети, выполнить действие с задержкой

Обмен данными. Open Monitoring

Датчики температуры и влажности AHT10/AHT15/AHT20/AHT21/AHT25

Датчик температуры и влажности SHT30 (SHT31/SHT35)

Действие «valueToVx()», «valueToArrVx()». Отслеживание заданного уровня в диапазоне значений

Действие «termostat()». Термостат

ESP-NOW. Датчик температуры и влажности с питанием от батареек

Последовательные интерфейсы (UART, I2C, SPI)

Управление одноканальным модулем реле

Протокол MQTT

Обмен данными. NarodMon

Обмен данными. ioControl



Программы для модулей ESP     Программы     Применения     Справочник         Контакты     SMACONT. Напишите нам smacont@ya.ru