Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/kotyara12/remqtt
MQTT клиент ESP32 и ESP-IDF с возможностью настройки двух серверов (основного и резервного) / MQTT client ESP32 and ESP-IDF with the ability to configure two servers (primary and reserved)
https://github.com/kotyara12/remqtt
esp-idf esp32 mqtt mqtt-client
Last synced: about 17 hours ago
JSON representation
MQTT клиент ESP32 и ESP-IDF с возможностью настройки двух серверов (основного и резервного) / MQTT client ESP32 and ESP-IDF with the ability to configure two servers (primary and reserved)
- Host: GitHub
- URL: https://github.com/kotyara12/remqtt
- Owner: kotyara12
- Created: 2021-04-12T19:43:59.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-08-09T19:10:21.000Z (3 months ago)
- Last Synced: 2024-08-09T20:36:26.043Z (3 months ago)
- Topics: esp-idf, esp32, mqtt, mqtt-client
- Language: C++
- Homepage:
- Size: 114 KB
- Stars: 4
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# 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 брокера используется [локальный сервер на роутере с мостом на внешний](https://kotyara12.ru/pubs/iot/keenetic-mqtt/) (либo брокер Home Assistant, например), а в качестве резервного - любой публичный. В этом случае, при потере доступа из локальной сети к интернет устройство продолжает успешно функционировать на локальном брокере, но мы теряем возможность внешнего управления извне. И наоборот, если по какой-либо причине происходит потеря доступа к основному брокеру, то устройство автоматически переключится на резервный сервер. Можно также указать в качестве основного и резервного брокра публичные сервера, просто повысив надежность системы. Либо использовать только один сервер, как обычно.
Библиотека основана на ESP-IDF библиотеке "mqtt_client.h", поэтому вряд ли будет работать на Arduino фреймворке. По сути, это просто "обертка" вокруг "mqtt_client.h" для более удобного использования и автоматического выбора сервера. Вам следует учесть, что данная библиотека интегрирована в удобную событийную систему, релизованную с помощью других библиотек [reEvents](https://github.com/kotyara12/reEvents) и [reStates](https://github.com/kotyara12/reStates). _Полный список зависимостей от других библиотек смотрите ниже в разделе "Зависимости"_. Если вы не планируете использовать весь набор библиотек, представленных в моем профиле, вам стоит создать форк и изменить код по своему желанию.
## Использование:
### Создание и запуск задачи MQTT клиента
Функция ```mqttTaskStart``` создает и, возможно, запускает задачу MQTT-клиента. Параметр ```createSuspended``` позволяет _создать задачу в приостановленном виде_, чтобы _запустить её позже по событию подключения к WiFi сети_ и (или) получению доступа в интернет. В случае успеха функция вернет true.
```
bool mqttTaskStart(bool createSuspended);
```
### Остановка и удаление задачи MQTT клиента
Данная функция может быть вызвана перед перезагрузкой устройства. В случае успеха функция вернет true.
```
bool mqttTaskStop();
```### Приостановка и восстановление задачи MQTT клиента
```
bool mqttTaskSuspend();
bool mqttTaskResume();
```
Данные функции могут быть использованы для приостановки задачи на время, когда устройство отключилось от WiFi сети или потерян доступ к серверу. В случае успеха функция вернет true.### Регистрация обработчиков событий
Функция ```mqttEventHandlerRegister``` выполняет регистрацию обработчиков событий модуля в основном цикле событий [reEvents](https://github.com/kotyara12/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);
```## Зависмости:
- esp_event_base.h (ESP-IDF)
- mqtt_client.h (ESP-IDF)
- project_config.h (настройки проекта)
- https://github.com/kotyara12/rLog
- https://github.com/kotyara12/rStrings
- https://github.com/kotyara12/reEsp32
- https://github.com/kotyara12/reEvents
- https://github.com/kotyara12/reStates
- https://github.com/kotyara12/reWifi
- https://github.com/kotyara12/reNvs## Примечания:
Данные замечания относятся к моим библиотекам, размещенным на ресурсе https://github.com/kotyara12?tab=repositories.- библиотеки, название которых начинается с префикса **re**, предназначены только для ESP32 и ESP-IDF (FreeRTOS)
- библиотеки, название которых начинается с префикса **ra**, предназначены только для ARDUINO
- библиотеки, название которых начинается с префикса **r**, могут быть использованы и для ARDUINO, и для ESP-IDFТак как я в настроящее время разрабатываю программы в основном для ESP-IDF, основная часть моих библиотек предназначена только для этого фреймворка. Но Вы можете портировать их для другой системы, взяв за основу.