{"id":20943236,"url":"https://github.com/kotyara12/remqtt","last_synced_at":"2025-05-14T00:32:29.025Z","repository":{"id":134652872,"uuid":"357319182","full_name":"kotyara12/reMqtt","owner":"kotyara12","description":"MQTT клиент ESP32 и ESP-IDF с возможностью настройки двух серверов (основного и резервного) / MQTT client ESP32 and ESP-IDF with the ability to configure two servers (primary and reserved)","archived":false,"fork":false,"pushed_at":"2024-08-09T19:10:21.000Z","size":117,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T10:21:34.649Z","etag":null,"topics":["esp-idf","esp32","mqtt","mqtt-client"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kotyara12.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-12T19:43:59.000Z","updated_at":"2024-08-09T19:10:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"40acebf8-ee35-471b-9a6d-0714b1044f02","html_url":"https://github.com/kotyara12/reMqtt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreMqtt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreMqtt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreMqtt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreMqtt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kotyara12","download_url":"https://codeload.github.com/kotyara12/reMqtt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254046495,"owners_count":22005607,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["esp-idf","esp32","mqtt","mqtt-client"],"created_at":"2024-11-18T23:34:57.072Z","updated_at":"2025-05-14T00:32:24.012Z","avatar_url":"https://github.com/kotyara12.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# MQTT клиент для ESP32 / ESP-IDF\n\n\u003e If you do not understand this text, please use the English version: \u003cbr/\u003ehttps://github.com/kotyara12/reMqtt/blob/master/README_EN.md \u003cbr/\u003eSorry for the machine translation into English.\n\n\nMQTT клиент ESP32 и ESP-IDF (_не будет работать в Arduino_) с возможностью настройки до двух MQTT брокеров с автоматическими переключением между ними. Брокер может быть \"_локальным_\" (то есть доступным только в пределах локальной сети, к которой подключено ESP), либо \"_публичным_\" (то есть доступным из сети интернет). Это позволяет реализовать схему работы, когда в качестве основого MQTT брокера используется [локальный сервер на роутере с мостом на внешний](https://kotyara12.ru/pubs/iot/keenetic-mqtt/) (либo брокер Home Assistant, например), а в качестве резервного - любой публичный. В этом случае, при потере доступа из локальной сети к интернет устройство продолжает успешно функционировать на локальном брокере, но мы теряем возможность внешнего управления извне. И наоборот, если по какой-либо причине происходит потеря доступа к основному брокеру, то устройство автоматически переключится на резервный сервер. Можно также указать в качестве основного и резервного брокра публичные сервера, просто повысив надежность системы. Либо использовать только один сервер, как обычно.\n\nБиблиотека основана на ESP-IDF библиотеке \"mqtt_client.h\", поэтому вряд ли будет работать на Arduino фреймворке. По сути, это просто \"обертка\" вокруг \"mqtt_client.h\" для более удобного использования и автоматического выбора сервера. Вам следует учесть, что данная библиотека интегрирована в удобную событийную систему, релизованную с помощью других библиотек [reEvents](https://github.com/kotyara12/reEvents) и [reStates](https://github.com/kotyara12/reStates). _Полный список зависимостей от других библиотек смотрите ниже в разделе \"Зависимости\"_. Если вы не планируете использовать весь набор библиотек, представленных в моем профиле, вам стоит создать форк и изменить код по своему желанию.\n\n## Использование:\n\n### Создание и запуск задачи MQTT клиента\nФункция ```mqttTaskStart``` создает и, возможно, запускает задачу MQTT-клиента. Параметр ```createSuspended``` позволяет _создать задачу в приостановленном виде_, чтобы _запустить её позже по событию подключения к WiFi сети_ и (или) получению доступа в интернет. В случае успеха функция вернет true.\n```\nbool mqttTaskStart(bool createSuspended);\n```\n### Остановка и удаление задачи MQTT клиента\nДанная функция может быть вызвана перед перезагрузкой устройства. В случае успеха функция вернет true.\n```\nbool mqttTaskStop();\n```\n\n### Приостановка и восстановление задачи MQTT клиента\n```\nbool mqttTaskSuspend();\nbool mqttTaskResume();\n```\nДанные функции могут быть использованы для приостановки задачи на время, когда устройство отключилось от WiFi сети или потерян доступ к серверу. В случае успеха функция вернет true.\n\n### Регистрация обработчиков событий \nФункция ```mqttEventHandlerRegister``` выполняет регистрацию обработчиков событий модуля в основном цикле событий [reEvents](https://github.com/kotyara12/reEvents). \n```\nbool mqttEventHandlerRegister();\n```\nС помощью этого клиент MQTT будет автоматически запущен или остановлен по событиям подключения к WiFi сети. Кроме того, задача MQTT клиента сама отправляет события подключения или отключения к MQTT брокеру для оповещения других подсистем прошивки. В случае успеха функция вернет true.\n\n### Получение статуса подключения\nС помощью функции ```mqttIsConnected``` можно узнать, подключен ли клиент к брокеру в данный момент или нет.\n```\nbool mqttIsConnected();\n```\n\n### Подписка на топики\n**Подписка на топик** ```topic``` с заданным ```QoS```. В случае успеха функция вернет true.\n```\nbool mqttSubscribe(const char *topic, int qos);\n```\n\n**Отмена подписки на ранее подписанный топик** ```topic```. В случае успеха функция вернет true.\n```\nbool mqttUnsubscribe(const char *topic);\n```\n\n### Публикация сообщения в топик\nПубликация сообщения ```payload``` в заданный топик ```topic``` с заданными параметрами ```QoS``` и ```retained```.\u003cbr/\u003e\nЕсли установлен бит ```forced```, то попытка отправки сообщения будет предпринята немедленно _в контексте вызывающей задачи_; иначе сообщение будет поставлено в очередь и отправлено позже _в контексте задачи MQTT клиента_.\u003cbr/\u003e\nПри ```free_topic = true``` переданная строка ```char *topic``` будет удалена из кучи после отправки.\u003cbr/\u003e\nАналогично, при ```free_payload = true``` переданная строка ```char *payload``` будет удалена из кучи после отправки.\u003cbr/\u003e\n```\nbool mqttPublish(char *topic, char *payload, int qos, bool retained, bool forced, bool free_topic, bool free_payload);\n```\n\n## Зависмости:\n  - esp_event_base.h (ESP-IDF)\n  - mqtt_client.h (ESP-IDF)\n  - project_config.h (настройки проекта)\n  - https://github.com/kotyara12/rLog\n  - https://github.com/kotyara12/rStrings\n  - https://github.com/kotyara12/reEsp32\n  - https://github.com/kotyara12/reEvents\n  - https://github.com/kotyara12/reStates\n  - https://github.com/kotyara12/reWifi\n  - https://github.com/kotyara12/reNvs\n\n## Примечания:\nДанные замечания относятся к моим библиотекам, размещенным на ресурсе https://github.com/kotyara12?tab=repositories.\n\n- библиотеки, название которых начинается с префикса **re**, предназначены только для ESP32 и ESP-IDF (FreeRTOS)\n- библиотеки, название которых начинается с префикса **ra**, предназначены только для ARDUINO\n- библиотеки, название которых начинается с префикса **r**, могут быть использованы и для ARDUINO, и для ESP-IDF\n\nТак как я в настроящее время разрабатываю программы в основном для ESP-IDF, основная часть моих библиотек предназначена только для этого фреймворка. Но Вы можете портировать их для другой системы, взяв за основу.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotyara12%2Fremqtt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkotyara12%2Fremqtt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotyara12%2Fremqtt/lists"}