Sobre el proyecto

AlteriomPainlessMesh es un fork de la librería painlessMesh para construir redes mesh autoorganizadas en dispositivos ESP8266 y ESP32. Mantiene el modelo de red ad-hoc original — sin controlador central ni router requerido, nodos identificados por IDs de chip de 32 bits, mensajería basada en JSON, sincronización de tiempo entre nodos — y añade paquetes estructurados orientados a despliegues IoT. Comportamiento central de la malla - Redes verdaderamente ad-hoc: cualquier conjunto de uno o más nodos se autoorganiza en una malla; el tamaño está limitado principalmente por el heap disponible para los buffers de conexión. - Mensajería JSON para legibilidad y fácil integración con frontends web/JavaScript; el README señala cierto coste de rendimiento y que la mensajería binaria sería una posible contribución. - La red usa las librerías nativas del SDK de ESP32/ESP8266 en lugar de las librerías WiFi de Arduino, por razones de latencia. - No es red IP: los mensajes se difunden o se envían a un nodeId específico. - Advertencias documentadas: evitar delay() (usar TaskScheduler), cuidado con conflictos de suscripción de eventos WiFi, mantener tasas de mensajes conservadoras y esperar posible pérdida de mensajes bajo tráfico alto. Extensiones de Alteriom El fork añade paquetes tipados con serialización y conversión JSON, alineados con un mqtt-schema (v0.7.2/v0.7.3) para integración IoT: - SensorPackage (200): temperatura, humedad, presión, batería, ID de sensor, marca de tiempo. - StatusPackage (202): banderas de estado, tiempo de actividad, memoria libre, intensidad WiFi, versión de firmware. - CommandPackage (400): comandos dirigidos con parámetros JSON e IDs únicos. - MetricsPackage (204): CPU, salud de memoria, rendimiento de red, estadísticas de paquetes, latencia, RSSI. - HealthCheckPackage (605): puntuación de salud, banderas de problemas, análisis de tendencias de fugas de memoria, mantenimiento predictivo, seguimiento de caídas/reinicios. - MeshNodeListPackage (600), MeshTopologyPackage (601), MeshAlertPackage (602), MeshBridgePackage (603), EnhancedStatusPackage (604): inventario de nodos, grafo de topología con calidad de enlace, alertas, puenteo de protocolos y estadísticas detalladas de malla. - Paquetes de failover de puente (610-614): estado del puente, elección, toma de control, coordinación y sincronización de tiempo NTP. Características operativas - Distribución OTA por difusión: el README afirma una reducción aproximada del 98% del tráfico de red para mallas de más de 50 nodos y actualizaciones paralelas que escalan a más de 100 nodos, habilitado por un único parámetro. - Puente de estado MQTT: publica el estado/topología de la malla para stacks de monitorización como Grafana, InfluxDB y Prometheus, con intervalos configurables. - Failover automático de puente: elección basada en RSSI (los empates se resuelven por tiempo de actividad, memoria libre, ID del nodo), detección de pérdida de puente mediante heartbeat, seguimiento de canal tras la toma de control, consenso distribuido y prevención de cerebro dividido mediante una elección a la vez, una retención de 60 s entre cambios de rol y un RSSI mínimo para un candidato solitario. - Coordinación multi-puente: múltiples puentes simultáneos con niveles de prioridad (1-10), roles (primario/secundario/en espera), descubrimiento de pares y estrategias de balanceo de carga. - Cola de mensajes para modo offline: cola basada en prioridad (CRITICAL/HIGH/NORMAL/LOW) con reglas de desalojo que protegen los mensajes críticos, detección automática de conexión/desconexión y vaciado automático. - Modo puerta de enlace compartida: todos los nodos se conectan al mismo router y pueden retransmitir a Internet, con elección de puerta de enlace, deduplicación y confirmación de entrega. Validación de hardware El README indica que los cambios 2.0 en failover, enrutamiento, seguimiento de canal y escaneo de estaciones se validaron en un banco de pruebas hardware-in-the-loop que combina ESP32, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-S3 y ESP8266 con un router real, con una puerta de liberación de tres ejecuciones limpias consecutivas de la suite completa. Nota sobre capacidad del ESP8266 El README describe el ESP8266 como adecuado para mallas pequeñas o como nodo hoja, e informa de 10-13 KB de heap libre cuando actúa como nodo interior en una malla de siete nodos. Señala que un único paquete de 8 KB o una parte de OTA puede no asignarse en ese nivel. Sugiere configurar el ESP8266 como hoja con maxconn = 0 o 1, y proporciona los asistentes overCapacity() y apChildren() más una comprobación periódica de memoria baja. Instalación y dependencias Disponible a través de Arduino Library Manager como "Alteriom PainlessMesh", mediante PlatformIO como sparck75/AlteriomPainlessMesh (el README señala que una entrada del propietario alteriom/ se detiene en 1.10.0), y en npm como @alteriom/painlessmesh. Las dependencias incluyen ArduinoJson, TaskScheduler y AsyncTCP (ESP32) o ESPAsyncTCP (ESP8266). Los ejemplos del repositorio cubren un nodo sensor básico, puente a Internet con detección automática de canal, failover de puente, puerta de enlace compartida, puente MQTT y un nodo sensor Alteriom que utiliza los paquetes estructurados.