{"id":20943233,"url":"https://github.com/kotyara12/redatasend","last_synced_at":"2026-01-25T22:52:03.023Z","repository":{"id":134652855,"uuid":"507802178","full_name":"kotyara12/reDataSend","owner":"kotyara12","description":"Универсальная библиотека для отправки данных на OpenMon, NarodMon, ThingSpeak","archived":false,"fork":false,"pushed_at":"2024-08-09T19:10:26.000Z","size":12,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-30T04:30:53.670Z","etag":null,"topics":["esp-idf","esp32","narodmon","open-monitoring","thingspeak"],"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":"2022-06-27T07:14:50.000Z","updated_at":"2025-02-20T23:49:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"a4ab365c-2a82-46db-94c0-883e1f858bb4","html_url":"https://github.com/kotyara12/reDataSend","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kotyara12/reDataSend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreDataSend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreDataSend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreDataSend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreDataSend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kotyara12","download_url":"https://codeload.github.com/kotyara12/reDataSend/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kotyara12%2FreDataSend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28761112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T20:56:06.009Z","status":"ssl_error","status_checked_at":"2026-01-25T20:54:48.203Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","narodmon","open-monitoring","thingspeak"],"created_at":"2024-11-18T23:34:50.391Z","updated_at":"2026-01-25T22:52:03.004Z","avatar_url":"https://github.com/kotyara12.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# reDataSend\nУниверсальная библиотека ESP32 \u0026 ESP-IDF для отправки данных на [**народный мониторинг**](https://narodmon.ru/?invite=kotyara12), [**open-monitoring.online**](http://open-monitoring.online/) и [**thingspeak**](https://thingspeak.com/) посредством HTTP(S) протокола. \n\nОтправка данных реализована в отдельной задаче FreeRTOS с автоматическим контролем минимально допустимых интервалов записи в канал / контроллер / устройство. При этом ставить новые данные в очередь отправки вы можете сколь угодно часто без опасений получить бан или блокировку со стороны сервера.\n\n## Использование библиотеки\n\n**Шаг 1. Запустите задачу**\n\nВначале вам необходимо создать и запустить задачу _data_send_ (один раз при запуске контроллера). Сделать это можно с помощью функции:\n```c\nbool dsTaskCreate(bool createSuspended);\n```\nЕсли **createSuspended = true**, то созданная задача будет приостанвлена до момента получения уведомления через системный цикл событий, что доступ в сеть интернет имеется, и можно начинать отправку данных. Иначе задача сразу же будет запущена в работу.\n\nС помощью дополнительных функций вы можете приостановить или возвобновить выполнение задачи на время отсутствия подключения к сети:\n```c\nbool dsTaskSuspend();\nbool dsTaskResume();\n```\n\n**Шаг 2. Инициализация контроллеров**\n\nЗатем создайте \"учетные записи\" для каждого канала / контроллера / устройства, в которые будет осуществляться отправка данных. В контексте данной библиотеки это называется _инициализация контроллера_. Это также делается только один раз, но для каждого канала / контроллера / устройства. При этом во внутреннем списке задачи сохраняются данные об идентификаторе контроллера, токене или ключе записи на сайт и минимальном интервале отправки новых данных. \n\nИспользуйте следюущую функцию:\n```c\nbool dsChannelInit(ext_data_service_t kind, uint32_t uid, const char *key, uint32_t min_interval, uint32_t err_interval);\n```\n_где:_\n- **kind** - тип контроллера\n```c\ntypedef enum {\n  EDS_OPENMON = 0,\n  EDS_NARODMON,\n  EDS_THINGSPEAK\n} ext_data_service_t;\n```\n- **uid** - идентификатор контроллера/канала/устройства, обычно он выдается самим сервисом при создании контроллера (но для народного мониторинга вы можете взять любой случайный)\n\n- **key** - ключ доступа к сервису (токен или MAC-адрес)\n\n- **min_interval** - минимальный интервал отправки данных на сервис в секундах в нормальном режиме\n\n- **err_interval** - минимальный интервал повторной отправки данных на сервис в секундах в случае ошибки\n\nНикакого физического обмена данными с сервисом при инициализации не происходит. При всех последующих обращениях к контроллеру вам потребуется указывать только его **uid**.\n\n**Шаг 3. Отправка данных в очередь задачи**\n\nДля отправки данных в канал/контроллер заранее подготовьте данные в формате используемого сервиса:\n\n- для [народного мониторинга](https://narodmon.ru/?invite=kotyara12) имена параметров могут быть произвольными, например **Tout=10.00\u0026Tin=25.00\u0026...**\n- для [open-monitoring.online](http://open-monitoring.online/) имена полей обозначены буквой p и номером по порядку: **p1=10,00\u0026p2=25.00\u0026...**\n- для [thingspeak](https://thingspeak.com/) используется похожий принцип, но имена полей обозначены словом field: **field1=10,00\u0026field2=25.00\u0026...**\n\nНикакие дополнительные поля к этим данным добавлять не нужно – библиотека сама добавит идентификатор и токен доступа при отправке.\n\nЗатем отправьте подготовленные данные в очередь с помощью функции\n```c\nbool dsSend(ext_data_service_t kind, uint32_t uid, char *data, bool free_data)\n```\n\nгде:\n\n- **data** – указатель на строку данных в куче\n- **free_data** – если указать здесь true, то после добавления задания в очередь строка **data** будет удалена из кучи, в противном случае вы должны сделать это самостоятельно.\n\nПосле вызова **dsSend()** данные попадают в исходящую очередь. Если добавление задания в очередь прошло успешно, функция вернет **true**.\n\nДалее задача проверяет, как давно происходила отправка в этот самый контроллер. Если время превышает минимальный интервал отправки, то делается попытка немедленно отправить данные. Если минимальный интервал ещё не истёк, то данные остаются в очереди. Но если во время ожидания поступят новые данные в этот же самый контроллер, то они будут заменены новыми данными. Этот механизм позволяет отправлять данные в очередь не заботясь об минимальных интервалах отправки.\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\n\n## Лицензия\nЭта библиотека является бесплатным программным обеспечением; вы можете распространять и / или изменять его в соответствии с условиями Стандартной общественной лицензии ограниченного применения GNU, опубликованной Free Software Foundation; либо версии 2.1 Лицензии, либо (по вашему выбору) любой более поздней версии.\n\nЭта библиотека распространяется в надежде, что она будет полезна, но _БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ_; _даже без подразумеваемых гарантий ТОВАРНОЙ ПРИГОДНОСТИ или ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ_. Подробнее см. Стандартную общественную лицензию ограниченного применения GNU.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotyara12%2Fredatasend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkotyara12%2Fredatasend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkotyara12%2Fredatasend/lists"}