/reMqtt

MQTT клиент ESP32 и ESP-IDF с возможностью настройки двух серверов (основного и резервного) / MQTT client ESP32 and ESP-IDF with the ability to configure two servers (primary and reserved)

Primary LanguageC++

MQTT клиент для ESP32 / ESP-IDF

If you do not understand this text, please use the English version:
https://github.com/kotyara12/reMqtt/blob/master/README_EN.md
Sorry for the machine translation into English.

MQTT клиент ESP32 и ESP-IDF (не будет работать в Arduino) с возможностью настройки до двух MQTT брокеров с автоматическими переключением между ними. Брокер может быть "локальным" (то есть доступным только в пределах локальной сети, к которой подключено ESP), либо "публичным" (то есть доступным из сети интернет). Это позволяет реализовать схему работы, когда в качестве основого MQTT брокера используется локальный сервер на роутере с мостом на внешний (либo брокер Home Assistant, например), а в качестве резервного - любой публичный. В этом случае, при потере доступа из локальной сети к интернет устройство продолжает успешно функционировать на локальном брокере, но мы теряем возможность внешнего управления извне. И наоборот, если по какой-либо причине происходит потеря доступа к основному брокеру, то устройство автоматически переключится на резервный сервер. Можно также указать в качестве основного и резервного брокра публичные сервера, просто повысив надежность системы. Либо использовать только один сервер, как обычно.

Библиотека основана на ESP-IDF библиотеке "mqtt_client.h", поэтому вряд ли будет работать на Arduino фреймворке. По сути, это просто "обертка" вокруг "mqtt_client.h" для более удобного использования и автоматического выбора сервера. Вам следует учесть, что данная библиотека интегрирована в удобную событийную систему, релизованную с помощью других библиотек reEvents и reStates. Полный список зависимостей от других библиотек смотрите ниже в разделе "Зависимости". Если вы не планируете использовать весь набор библиотек, представленных в моем профиле, вам стоит создать форк и изменить код по своему желанию.

Использование:

Создание и запуск задачи MQTT клиента

Функция mqttTaskStart создает и, возможно, запускает задачу MQTT-клиента. Параметр createSuspended позволяет создать задачу в приостановленном виде, чтобы запустить её позже по событию подключения к WiFi сети и (или) получению доступа в интернет. В случае успеха функция вернет true.

bool mqttTaskStart(bool createSuspended);

Остановка и удаление задачи MQTT клиента

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

bool mqttTaskStop();

Приостановка и восстановление задачи MQTT клиента

bool mqttTaskSuspend();
bool mqttTaskResume();

Данные функции могут быть использованы для приостановки задачи на время, когда устройство отключилось от WiFi сети или потерян доступ к серверу. В случае успеха функция вернет true.

Регистрация обработчиков событий

Функция mqttEventHandlerRegister выполняет регистрацию обработчиков событий модуля в основном цикле событий reEvents.

bool mqttEventHandlerRegister();

С помощью этого клиент MQTT будет автоматически запущен или остановлен по событиям подключения к WiFi сети. Кроме того, задача MQTT клиента сама отправляет события подключения или отключения к MQTT брокеру для оповещения других подсистем прошивки. В случае успеха функция вернет true.

Получение статуса подключения

С помощью функции mqttIsConnected можно узнать, подключен ли клиент к брокеру в данный момент или нет.

bool mqttIsConnected();

Подписка на топики

Подписка на топик topic с заданным QoS. В случае успеха функция вернет true.

bool mqttSubscribe(const char *topic, int qos);

Отмена подписки на ранее подписанный топик topic. В случае успеха функция вернет true.

bool mqttUnsubscribe(const char *topic);

Публикация сообщения в топик

Публикация сообщения payload в заданный топик topic с заданными параметрами QoS и retained.
Если установлен бит forced, то попытка отправки сообщения будет предпринята немедленно в контексте вызывающей задачи; иначе сообщение будет поставлено в очередь и отправлено позже в контексте задачи MQTT клиента.
При free_topic = true переданная строка char *topic будет удалена из кучи после отправки.
Аналогично, при free_payload = true переданная строка char *payload будет удалена из кучи после отправки.

bool mqttPublish(char *topic, char *payload, int qos, bool retained, bool forced, bool free_topic, bool free_payload);

Зависмости:

Примечания:

Данные замечания относятся к моим библиотекам, размещенным на ресурсе https://github.com/kotyara12?tab=repositories.

  • библиотеки, название которых начинается с префикса re, предназначены только для ESP32 и ESP-IDF (FreeRTOS)
  • библиотеки, название которых начинается с префикса ra, предназначены только для ARDUINO
  • библиотеки, название которых начинается с префикса r, могут быть использованы и для ARDUINO, и для ESP-IDF

Так как я в настроящее время разрабатываю программы в основном для ESP-IDF, основная часть моих библиотек предназначена только для этого фреймворка. Но Вы можете портировать их для другой системы, взяв за основу.