Об этом проекте

AlteriomPainlessMesh — это форк библиотеки painlessMesh для построения самоорганизующихся mesh-сетей на устройствах ESP8266 и ESP32. Он сохраняет исходную модель ad-hoc сети — без центрального контроллера или маршрутизатора, узлы идентифицируются 32-битными чип-ID, обмен сообщениями на основе JSON, синхронизация времени между узлами — и добавляет структурированные пакеты, ориентированные на IoT-развёртывания. Базовое поведение mesh - Настоящая ad-hoc сеть: любой набор из одного или нескольких узлов самоорганизуется в mesh; размер ограничен в основном heap-памятью, доступной для буферов соединений. - JSON-сообщения для читаемости и лёгкой интеграции с веб/JavaScript-интерфейсами; в README отмечаются некоторые накладные расходы по производительности и что бинарный обмен сообщениями мог бы стать возможным вкладом в проект. - Сеть использует нативные библиотеки SDK ESP32/ESP8266, а не библиотеки Arduino WiFi, из-за задержек. - Это не IP-сеть: сообщения рассылаются широковещательно или отправляются конкретному nodeId. - Документированные ограничения: избегайте delay() (используйте TaskScheduler), остерегайтесь конфликтов подписки на WiFi-события, поддерживайте консервативные частоты сообщений и ожидайте возможной потери сообщений при высокой нагрузке. Расширения Alteriom Форк добавляет типизированные пакеты с сериализацией и преобразованием в JSON, согласованные с mqtt-schema (v0.7.2/v0.7.3) для IoT-интеграции: - SensorPackage (200): температура, влажность, давление, заряд батареи, идентификатор датчика, временная метка. - StatusPackage (202): флаги состояния, аптайм, свободная память, уровень WiFi, версия прошивки. - CommandPackage (400): целевые команды с JSON-параметрами и уникальными идентификаторами. - MetricsPackage (204): CPU, состояние памяти, пропускная способность сети, статистика пакетов, задержка, RSSI. - HealthCheckPackage (605): оценка работоспособности, флаги проблем, анализ тенденций утечек памяти, предиктивное обслуживание, отслеживание сбоев/перезагрузок. - MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604): инвентаризация узлов, граф топологии с качеством связи, оповещения, мостовое взаимодействие протоколов и детальная статистика mesh. - Пакеты переключения моста (610-614): статус моста, выборы, переход роли, координация и синхронизация времени NTP. Эксплуатационные возможности - Широковещательное распространение OTA: в README утверждается примерно 98% снижение сетевого трафика для mesh-сетей от 50 узлов и параллельные обновления, масштабирующиеся до 100+ узлов, включается одним параметром. - MQTT-мост статуса: публикует статус/топологию mesh для систем мониторинга, таких как Grafana, InfluxDB и Prometheus, с настраиваемыми интервалами. - Автоматическое переключение моста: выборы на основе RSSI (при равенстве — по аптайму, свободной памяти, node ID), обнаружение потери моста по heartbeat, переход канала после захвата роли, распределённый консенсус и предотвращение split-brain за счёт одних выборов в момент времени, 60-секундной паузы между сменами ролей и минимального RSSI для единственного кандидата. - Координация нескольких мостов: несколько одновременных мостов с приоритетами (1-10), ролями (primary/secondary/standby), обнаружением пиров и стратегиями балансировки нагрузки. - Очередь сообщений для офлайн-режима: приоритетная очередь (CRITICAL/HIGH/NORMAL/LOW) с правилами вытеснения, защищающими критические сообщения, автоматическое определение онлайн/офлайн и автоматический сброс. - Режим общего шлюза: все узлы подключаются к одному роутеру и могут выходить в Интернет, с выборами шлюза, дедупликацией и подтверждением доставки. Аппаратная валидация В README указано, что изменения 2.0 в переключении моста, маршрутизации, следовании за каналом и сканировании станций были проверены на аппаратном стенде с обратной связью, объединяющем ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 и ESP8266 с реальным роутером, с критерием релиза в виде трёх последовательных чистых прогонов полного набора тестов. Примечание по ёмкости ESP8266 В README говорится, что ESP8266 подходит для небольших mesh-сетей или в качестве листового узла, сообщается о 10-13 КБ свободной heap при работе в качестве внутреннего узла в mesh из семи узлов, и отмечается, что один пакет размером 8 КБ или одна часть OTA могут не выделиться при таком уровне. Рекомендуется настраивать ESP8266 как лист с maxconn = 0 или 1, предоставляются вспомогательные функции overCapacity() и apChildren(), а также периодическая проверка низкой памяти. Установка и зависимости Доступна через Arduino Library Manager как "Alteriom PainlessMesh", через PlatformIO как sparck75/AlteriomPainlessMesh (в README отмечается, что запись владельца alteriom/ останавливается на 1.10.0), и на npm как @alteriom/painlessmesh. Зависимости включают ArduinoJson, TaskScheduler и AsyncTCP (ESP32) или ESPAsyncTCP (ESP8266). Примеры в репозитории охватывают базовый сенсорный узел, мост в Интернет с автоматическим определением канала, переключение моста, общий шлюз, MQTT-мост и сенсорный узел Alteriom с использованием структурированных пакетов.