@alteriom/painlessmesh 1.6.1 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +380 -143
  2. package/LICENSE +674 -674
  3. package/README.md +477 -434
  4. package/RELEASE_GUIDE.md +504 -418
  5. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
  6. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
  7. package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
  8. package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
  9. package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
  10. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
  11. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
  12. package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
  13. package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
  14. package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
  15. package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
  16. package/docs/PHASE1_GUIDE.md +349 -0
  17. package/docs/PHASE2_GUIDE.md +543 -0
  18. package/docs/README.md +77 -70
  19. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
  20. package/docs/alteriom/overview.md +507 -507
  21. package/docs/api/core-api.md +606 -606
  22. package/docs/architecture/mesh-architecture.md +378 -378
  23. package/docs/architecture/plugin-system.md +516 -516
  24. package/docs/getting-started/first-mesh.md +409 -409
  25. package/docs/getting-started/installation.md +274 -274
  26. package/docs/getting-started/quickstart.md +157 -157
  27. package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
  28. package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/improvements/README.md +86 -68
  31. package/docs/improvements/ota-and-status-enhancements.md +911 -0
  32. package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
  33. package/docs/improvements/ota-status-quick-reference.md +284 -0
  34. package/docs/platformio-publishing.md +255 -0
  35. package/docs/platformio-setup-summary.md +121 -0
  36. package/docs/troubleshooting/common-issues.md +520 -520
  37. package/docs/troubleshooting/faq.md +472 -472
  38. package/docs/tutorials/basic-examples.md +717 -717
  39. package/docs/wiki/API-Reference.md +245 -245
  40. package/docs/wiki/Complete-Documentation.md +122 -122
  41. package/examples/alteriom/README.md +139 -81
  42. package/examples/alteriom/alteriom.ino +186 -185
  43. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  44. package/examples/alteriom/platformio.ini +24 -24
  45. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  46. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  47. package/examples/alteriomImproved/platformio.ini +25 -0
  48. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  49. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  50. package/examples/alteriomPhase1/platformio.ini +25 -0
  51. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  52. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  53. package/examples/alteriomPhase2/platformio.ini +25 -0
  54. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  55. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  56. package/examples/alteriomSensorNode/platformio.ini +25 -0
  57. package/examples/basic/basic.ino +66 -66
  58. package/examples/basic/platformio.ini +25 -25
  59. package/examples/bridge/bridge.ino +51 -51
  60. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  61. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  62. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  63. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  64. package/examples/bridge/platformio.ini +25 -25
  65. package/examples/echoNode/echoNode.ino +33 -33
  66. package/examples/echoNode/platformio.ini +25 -25
  67. package/examples/logClient/logClient.ino +109 -109
  68. package/examples/logClient/platformio.ini +25 -25
  69. package/examples/logServer/logServer.ino +81 -81
  70. package/examples/logServer/platformio.ini +25 -25
  71. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  72. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  73. package/examples/meshCommandNode/platformio.ini +25 -0
  74. package/examples/mqttBridge/mqttBridge.ino +118 -118
  75. package/examples/mqttBridge/platformio.ini +26 -26
  76. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  77. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  78. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  79. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  80. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  81. package/examples/mqttCommandBridge/platformio.ini +26 -0
  82. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  83. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  84. package/examples/mqttStatusBridge/platformio.ini +26 -0
  85. package/examples/mqttTopologyTest/README.md +467 -0
  86. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  87. package/examples/mqttTopologyTest/platformio.ini +26 -0
  88. package/examples/namedMesh/namedMesh.ino +97 -97
  89. package/examples/namedMesh/platformio.ini +25 -25
  90. package/examples/otaReceiver/otaReceiver.ino +79 -79
  91. package/examples/otaReceiver/platformio.ini +25 -25
  92. package/examples/otaSender/otaSender.ino +160 -151
  93. package/examples/otaSender/platformio.ini +25 -25
  94. package/examples/startHere/platformio.ini +25 -25
  95. package/examples/startHere/startHere.ino +159 -159
  96. package/examples/webServer/platformio.ini +27 -27
  97. package/examples/webServer/webServer.ino +89 -89
  98. package/keywords.txt +48 -48
  99. package/library.json +55 -34
  100. package/library.properties +10 -10
  101. package/package.json +86 -78
  102. package/src/AlteriomPainlessMesh.h +97 -97
  103. package/src/arduino/wifi.hpp +365 -365
  104. package/src/boost/asynctcp.hpp +279 -279
  105. package/src/painlessMesh.h +70 -70
  106. package/src/painlessMeshSTA.cpp +236 -236
  107. package/src/painlessMeshSTA.h +58 -58
  108. package/src/painlessTaskOptions.h +4 -4
  109. package/src/painlessmesh/base64.hpp +111 -111
  110. package/src/painlessmesh/buffer.hpp +229 -229
  111. package/src/painlessmesh/callback.hpp +91 -91
  112. package/src/painlessmesh/configuration.hpp +77 -77
  113. package/src/painlessmesh/connection.hpp +192 -192
  114. package/src/painlessmesh/layout.hpp +188 -188
  115. package/src/painlessmesh/logger.hpp +158 -158
  116. package/src/painlessmesh/memory.hpp +119 -119
  117. package/src/painlessmesh/mesh.hpp +761 -560
  118. package/src/painlessmesh/metrics.hpp +322 -322
  119. package/src/painlessmesh/ntp.hpp +263 -263
  120. package/src/painlessmesh/ota.hpp +582 -553
  121. package/src/painlessmesh/plugin.hpp +188 -188
  122. package/src/painlessmesh/protocol.hpp +813 -813
  123. package/src/painlessmesh/router.hpp +322 -322
  124. package/src/painlessmesh/tcp.hpp +71 -71
  125. package/src/painlessmesh/validation.hpp +238 -238
  126. package/src/plugin/performance.hpp +214 -214
  127. package/src/plugin/remote.hpp +64 -64
  128. package/src/scheduler.cpp +10 -10
  129. package/src/wifi.cpp +2 -2
@@ -0,0 +1,543 @@
1
+ # Phase 2 Features Guide
2
+
3
+ ## Quick Summary
4
+
5
+ Phase 2 adds production-ready features for scalable OTA distribution and professional monitoring:
6
+
7
+ - ✅ **Broadcast OTA** - True mesh-wide firmware distribution scaling to 50+ nodes
8
+ - ✅ **MQTT Status Bridge** - Professional monitoring integration with Grafana, InfluxDB, Prometheus
9
+
10
+ ## Features Overview
11
+
12
+ ### 1. Broadcast OTA (Option 1A)
13
+
14
+ **What it does:** Distributes firmware to all nodes simultaneously via broadcast, dramatically reducing network traffic.
15
+
16
+ **Key Benefits:**
17
+ - **~98% network traffic reduction** vs unicast (1 broadcast vs N unicasts)
18
+ - **Faster distribution** - All nodes receive chunks in parallel
19
+ - **Scales to 50-100+ nodes** efficiently
20
+ - **Backward compatible** - Works with Phase 1 compression
21
+ - **Memory efficient** - Only +2-5KB per node
22
+
23
+ **Architecture:**
24
+ ```
25
+ Root Node All Nodes
26
+ ├─> Broadcast: Announce ─┐
27
+ ├─> Broadcast: Chunk 0 ─┼─> Listen & Cache
28
+ ├─> Broadcast: Chunk 1 ─┼─> Assemble Firmware
29
+ └─> Broadcast: Chunk N ─┘ Reboot When Complete
30
+ ```
31
+
32
+ ### 2. MQTT Status Bridge (Option 2E)
33
+
34
+ **What it does:** Publishes comprehensive mesh status to MQTT topics for professional monitoring tools.
35
+
36
+ **Key Benefits:**
37
+ - **Cloud integration** via MQTT
38
+ - **Professional monitoring** - Grafana, InfluxDB, Prometheus, Home Assistant
39
+ - **Real-time visibility** into mesh health
40
+ - **Automated alerting** for critical conditions
41
+ - **Configurable publishing** intervals and topics
42
+
43
+ **MQTT Topics:**
44
+ - `mesh/status/nodes` - List of all nodes in mesh
45
+ - `mesh/status/topology` - Complete mesh structure JSON
46
+ - `mesh/status/metrics` - Performance statistics
47
+ - `mesh/status/alerts` - Active alert conditions
48
+ - `mesh/status/node/{id}` - Per-node detailed status (optional)
49
+
50
+ ---
51
+
52
+ ## Getting Started
53
+
54
+ ### Prerequisites
55
+
56
+ - Phase 1 features installed (Compressed OTA + Enhanced Status)
57
+ - ESP32 or ESP8266 hardware
58
+ - For MQTT Bridge: MQTT broker (Mosquitto, HiveMQ, etc.)
59
+ - For MQTT Bridge: External WiFi connection
60
+
61
+ ### Quick Start: Broadcast OTA
62
+
63
+ ```cpp
64
+ #include "painlessMesh.h"
65
+
66
+ painlessMesh mesh;
67
+
68
+ void setup() {
69
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, &scheduler, MESH_PORT);
70
+
71
+ #ifdef PAINLESSMESH_ENABLE_OTA
72
+ // Phase 2: Enable broadcast mode
73
+ mesh.offerOTA(
74
+ "sensor", // Role
75
+ "ESP32", // Hardware
76
+ firmwareMD5, // MD5 hash
77
+ numParts, // Number of chunks
78
+ false, // Not forced
79
+ true, // *** BROADCAST MODE ***
80
+ true // Compressed (Phase 1)
81
+ );
82
+ #endif
83
+ }
84
+ ```
85
+
86
+ ### Quick Start: MQTT Status Bridge
87
+
88
+ ```cpp
89
+ #include <PubSubClient.h>
90
+ #include "examples/bridge/mqtt_status_bridge.hpp"
91
+
92
+ painlessMesh mesh;
93
+ PubSubClient mqttClient(mqttBroker, 1883, mqttCallback, wifiClient);
94
+ MqttStatusBridge* statusBridge;
95
+
96
+ void setup() {
97
+ // Initialize mesh as bridge node
98
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT, WIFI_AP_STA, 6);
99
+ mesh.setRoot(true);
100
+ mesh.setContainsRoot(true);
101
+
102
+ // Connect to external WiFi for MQTT
103
+ mesh.stationManual(STATION_SSID, STATION_PASSWORD);
104
+
105
+ // Initialize status bridge
106
+ statusBridge = new MqttStatusBridge(mesh, mqttClient);
107
+ statusBridge->setPublishInterval(30000); // 30 seconds
108
+ statusBridge->begin();
109
+ }
110
+ ```
111
+
112
+ ---
113
+
114
+ ## API Reference
115
+
116
+ ### Broadcast OTA
117
+
118
+ #### mesh.offerOTA()
119
+
120
+ ```cpp
121
+ std::shared_ptr<Task> offerOTA(
122
+ TSTRING role,
123
+ TSTRING hardware,
124
+ TSTRING md5,
125
+ size_t noPart,
126
+ bool forced = false,
127
+ bool broadcasted = false, // Phase 2: Broadcast mode
128
+ bool compressed = false // Phase 1: Compression
129
+ )
130
+ ```
131
+
132
+ **Parameters:**
133
+ - `role` - Node role this firmware is for (e.g., "sensor", "gateway")
134
+ - `hardware` - Hardware type: "ESP32" or "ESP8266"
135
+ - `md5` - MD5 hash of firmware (for version checking)
136
+ - `noPart` - Number of firmware chunks
137
+ - `forced` - Force update even if MD5 matches (default: false)
138
+ - **`broadcasted`** - **[Phase 2]** Enable broadcast mode (default: false)
139
+ - `compressed` - [Phase 1] Enable compression (default: false)
140
+
141
+ **Returns:** Shared pointer to Task that manages OTA announcements
142
+
143
+ **Example:**
144
+ ```cpp
145
+ auto otaTask = mesh.offerOTA(
146
+ "sensor", "ESP32", md5, 100,
147
+ false, // not forced
148
+ true, // BROADCAST MODE
149
+ true // compressed
150
+ );
151
+ ```
152
+
153
+ ### MQTT Status Bridge
154
+
155
+ #### Constructor
156
+
157
+ ```cpp
158
+ MqttStatusBridge(painlessMesh& mesh, PubSubClient& mqttClient)
159
+ ```
160
+
161
+ #### Configuration Methods
162
+
163
+ ```cpp
164
+ void setPublishInterval(uint32_t interval)
165
+ ```
166
+ Set publishing interval in milliseconds (default: 30000)
167
+
168
+ ```cpp
169
+ void setTopicPrefix(const String& prefix)
170
+ ```
171
+ Set MQTT topic prefix (default: "mesh/status/")
172
+
173
+ ```cpp
174
+ void enableTopology(bool enable)
175
+ ```
176
+ Enable/disable topology publishing (default: true)
177
+
178
+ ```cpp
179
+ void enableMetrics(bool enable)
180
+ ```
181
+ Enable/disable metrics publishing (default: true)
182
+
183
+ ```cpp
184
+ void enableAlerts(bool enable)
185
+ ```
186
+ Enable/disable alerts publishing (default: true)
187
+
188
+ ```cpp
189
+ void enablePerNode(bool enable)
190
+ ```
191
+ Enable/disable per-node status publishing (default: false)
192
+ ⚠️ **Warning:** Can be expensive for large meshes (50+ nodes)
193
+
194
+ #### Control Methods
195
+
196
+ ```cpp
197
+ void begin()
198
+ ```
199
+ Start publishing status to MQTT
200
+
201
+ ```cpp
202
+ void stop()
203
+ ```
204
+ Stop publishing
205
+
206
+ ```cpp
207
+ void publishNow()
208
+ ```
209
+ Trigger immediate status publish (useful for testing)
210
+
211
+ ---
212
+
213
+ ## Usage Examples
214
+
215
+ ### Example 1: Basic Broadcast OTA
216
+
217
+ ```cpp
218
+ #include "painlessMesh.h"
219
+
220
+ #define MESH_PREFIX "myMesh"
221
+ #define MESH_PASSWORD "password"
222
+ #define MESH_PORT 5555
223
+ #define OTA_PART_SIZE 1024
224
+
225
+ painlessMesh mesh;
226
+
227
+ void setup() {
228
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, MESH_PORT);
229
+
230
+ #ifdef PAINLESSMESH_ENABLE_OTA
231
+ // Setup OTA sender
232
+ mesh.initOTASend(firmwareCallback, OTA_PART_SIZE);
233
+
234
+ // Announce firmware with broadcast + compression
235
+ mesh.offerOTA(
236
+ "sensor", // role
237
+ "ESP32", // hardware
238
+ "abc123...", // MD5
239
+ 150, // number of chunks
240
+ false, // not forced
241
+ true, // BROADCAST
242
+ true // compressed
243
+ );
244
+ #endif
245
+ }
246
+
247
+ size_t firmwareCallback(ota::DataRequest pkg, char* buffer) {
248
+ // Read firmware chunk from storage
249
+ // Return bytes read into buffer
250
+ }
251
+ ```
252
+
253
+ ### Example 2: MQTT Status Bridge with Custom Configuration
254
+
255
+ ```cpp
256
+ #include <PubSubClient.h>
257
+ #include "examples/bridge/mqtt_status_bridge.hpp"
258
+
259
+ MqttStatusBridge* bridge;
260
+
261
+ void setup() {
262
+ // ... initialize mesh and MQTT ...
263
+
264
+ bridge = new MqttStatusBridge(mesh, mqttClient);
265
+
266
+ // Custom configuration
267
+ bridge->setPublishInterval(60000); // Publish every minute
268
+ bridge->setTopicPrefix("alteriom/"); // Custom topic prefix
269
+ bridge->enableTopology(true); // Publish topology
270
+ bridge->enableMetrics(true); // Publish metrics
271
+ bridge->enableAlerts(true); // Publish alerts
272
+ bridge->enablePerNode(false); // Disable per-node (too many nodes)
273
+
274
+ bridge->begin();
275
+ }
276
+
277
+ void loop() {
278
+ mesh.update();
279
+ mqttClient.loop();
280
+
281
+ // Trigger manual publish on demand
282
+ if (buttonPressed()) {
283
+ bridge->publishNow();
284
+ }
285
+ }
286
+ ```
287
+
288
+ ### Example 3: Combined Phase 1 + Phase 2 Features
289
+
290
+ ```cpp
291
+ #include "painlessMesh.h"
292
+ #include "examples/alteriom/alteriom_sensor_package.hpp"
293
+ #include "examples/bridge/mqtt_status_bridge.hpp"
294
+
295
+ void setup() {
296
+ mesh.init(...);
297
+
298
+ // Phase 1: Enhanced Status
299
+ alteriom::EnhancedStatusPackage status;
300
+ status.uptime = millis() / 1000;
301
+ status.nodeCount = mesh.getNodeList().size();
302
+ mesh.sendBroadcast(status.toJsonString());
303
+
304
+ // Phase 2: Broadcast OTA
305
+ mesh.offerOTA("sensor", "ESP32", md5, parts, false, true, true);
306
+
307
+ // Phase 2: MQTT Bridge
308
+ statusBridge->begin();
309
+ }
310
+ ```
311
+
312
+ ---
313
+
314
+ ## Performance & Scaling
315
+
316
+ ### Broadcast OTA Performance
317
+
318
+ | Mesh Size | Unicast Traffic | Broadcast Traffic | Reduction |
319
+ |-----------|----------------|-------------------|-----------|
320
+ | 10 nodes | 10x chunks | 1x chunks | 90% |
321
+ | 50 nodes | 50x chunks | 1x chunks | 98% |
322
+ | 100 nodes | 100x chunks | 1x chunks | 99% |
323
+
324
+ **Example:** 150 chunk firmware update
325
+ - **Unicast mode:** 50 nodes × 150 chunks = 7,500 transmissions
326
+ - **Broadcast mode:** 1 × 150 chunks = 150 transmissions
327
+ - **Reduction:** 7,350 fewer transmissions (98%)
328
+
329
+ ### Memory Usage
330
+
331
+ | Feature | Memory Impact | Notes |
332
+ |---------|--------------|-------|
333
+ | Broadcast OTA | +2-5KB per node | Chunk bitmap + buffer |
334
+ | MQTT Bridge | +5-8KB root node | Status collection |
335
+
336
+ ### MQTT Traffic
337
+
338
+ | Feature | Messages/Interval | Size | Total/Interval |
339
+ |---------|------------------|------|----------------|
340
+ | Node List | 1 | ~200 bytes | 200 bytes |
341
+ | Topology | 1 | ~1-5KB | 1-5KB |
342
+ | Metrics | 1 | ~300 bytes | 300 bytes |
343
+ | Alerts | 1 | ~400 bytes | 400 bytes |
344
+ | Per-node (50 nodes) | 50 | ~150 bytes | ~7.5KB |
345
+
346
+ **Recommended:** Disable per-node publishing for meshes >20 nodes
347
+
348
+ ---
349
+
350
+ ## Integration with Monitoring Tools
351
+
352
+ ### Grafana Dashboard
353
+
354
+ ```json
355
+ {
356
+ "datasource": "MQTT",
357
+ "targets": [
358
+ {
359
+ "topic": "mesh/status/metrics",
360
+ "field": "nodeCount"
361
+ }
362
+ ]
363
+ }
364
+ ```
365
+
366
+ ### InfluxDB Telegraf
367
+
368
+ ```toml
369
+ [[inputs.mqtt_consumer]]
370
+ servers = ["tcp://localhost:1883"]
371
+ topics = [
372
+ "mesh/status/metrics",
373
+ "mesh/status/alerts"
374
+ ]
375
+ data_format = "json"
376
+ ```
377
+
378
+ ### Prometheus MQTT Exporter
379
+
380
+ ```yaml
381
+ mqtt:
382
+ server: tcp://localhost:1883
383
+ topics:
384
+ - mesh/status/metrics
385
+ - mesh/status/alerts
386
+ ```
387
+
388
+ ### Home Assistant
389
+
390
+ ```yaml
391
+ sensor:
392
+ - platform: mqtt
393
+ name: "Mesh Node Count"
394
+ state_topic: "mesh/status/metrics"
395
+ value_template: "{{ value_json.nodeCount }}"
396
+
397
+ - platform: mqtt
398
+ name: "Mesh Free Heap"
399
+ state_topic: "mesh/status/metrics"
400
+ value_template: "{{ value_json.freeHeap }}"
401
+ unit_of_measurement: "bytes"
402
+ ```
403
+
404
+ ---
405
+
406
+ ## Troubleshooting
407
+
408
+ ### Broadcast OTA Issues
409
+
410
+ **Problem:** Nodes not receiving broadcast chunks
411
+
412
+ **Solutions:**
413
+ 1. Ensure `broadcasted=true` in offerOTA()
414
+ 2. Check mesh connectivity (all nodes must be connected)
415
+ 3. Verify nodes are running receiver code with `initOTAReceive()`
416
+ 4. Check for mesh congestion (add delays between chunks)
417
+
418
+ **Problem:** Out-of-sequence chunks
419
+
420
+ **Solution:** This is normal! Broadcast mode handles out-of-order delivery automatically.
421
+
422
+ ### MQTT Bridge Issues
423
+
424
+ **Problem:** No status published to MQTT
425
+
426
+ **Solutions:**
427
+ 1. Check MQTT broker connectivity
428
+ 2. Verify mqttClient.connected() returns true
429
+ 3. Check publish interval (default 30s)
430
+ 4. Enable Serial debug output
431
+
432
+ **Problem:** High MQTT traffic
433
+
434
+ **Solutions:**
435
+ 1. Increase publish interval (30s → 60s → 120s)
436
+ 2. Disable per-node publishing
437
+ 3. Disable topology publishing if mesh structure is static
438
+
439
+ ---
440
+
441
+ ## Migration Guide
442
+
443
+ ### From Phase 1 to Phase 2
444
+
445
+ **Step 1:** Update offerOTA() calls
446
+ ```cpp
447
+ // Phase 1
448
+ mesh.offerOTA(role, hardware, md5, parts, false, false, true);
449
+
450
+ // Phase 2 - just add broadcast flag
451
+ mesh.offerOTA(role, hardware, md5, parts, false, true, true);
452
+ // ^^^^
453
+ ```
454
+
455
+ **Step 2:** Add MQTT bridge (optional)
456
+ ```cpp
457
+ #include "examples/bridge/mqtt_status_bridge.hpp"
458
+
459
+ MqttStatusBridge* bridge = new MqttStatusBridge(mesh, mqttClient);
460
+ bridge->begin();
461
+ ```
462
+
463
+ ### Backward Compatibility
464
+
465
+ ✅ **Fully backward compatible**
466
+ - Broadcast defaults to `false` (unicast mode)
467
+ - Non-broadcast nodes work alongside broadcast nodes
468
+ - MQTT bridge is optional add-on
469
+ - All Phase 1 features continue to work
470
+
471
+ ---
472
+
473
+ ## Best Practices
474
+
475
+ ### When to Use Broadcast OTA
476
+
477
+ ✅ **Use broadcast mode when:**
478
+ - Mesh has 10+ nodes
479
+ - All nodes need same firmware
480
+ - Network bandwidth is limited
481
+ - Fast distribution is critical
482
+
483
+ ❌ **Don't use broadcast mode when:**
484
+ - Mesh has <5 nodes (unicast is sufficient)
485
+ - Different nodes need different firmware
486
+ - Targeting specific nodes only
487
+
488
+ ### When to Use MQTT Status Bridge
489
+
490
+ ✅ **Use MQTT bridge when:**
491
+ - Production deployment
492
+ - Remote monitoring required
493
+ - Integration with existing tools (Grafana, etc.)
494
+ - Automated alerting needed
495
+ - Cloud connectivity available
496
+
497
+ ❌ **Don't use MQTT bridge when:**
498
+ - Development/testing environment
499
+ - No external WiFi available
500
+ - No MQTT broker available
501
+ - Mesh is purely offline
502
+
503
+ ### Configuration Recommendations
504
+
505
+ **Small meshes (1-10 nodes):**
506
+ - Publish interval: 30 seconds
507
+ - Enable all features
508
+ - Enable per-node status
509
+
510
+ **Medium meshes (10-50 nodes):**
511
+ - Publish interval: 60 seconds
512
+ - Enable topology, metrics, alerts
513
+ - Disable per-node status
514
+
515
+ **Large meshes (50+ nodes):**
516
+ - Publish interval: 120 seconds
517
+ - Enable metrics and alerts only
518
+ - Disable topology and per-node
519
+
520
+ ---
521
+
522
+ ## Next Steps
523
+
524
+ ### Phase 3 Features (Future)
525
+ - Progressive rollout OTA (Option 1B)
526
+ - Real-time telemetry streams (Option 2C)
527
+ - Proactive alerting system
528
+ - Large-scale mesh support (100+ nodes)
529
+
530
+ ### Further Reading
531
+ - [PHASE2_IMPLEMENTATION.md](improvements/PHASE2_IMPLEMENTATION.md) - Technical details
532
+ - [examples/alteriom/phase2_features.ino](../examples/alteriom/phase2_features.ino) - Complete example
533
+ - [examples/bridge/mqtt_status_bridge_example.ino](../examples/bridge/mqtt_status_bridge_example.ino) - MQTT example
534
+ - [FEATURE_PROPOSALS.md](improvements/FEATURE_PROPOSALS.md) - All features overview
535
+
536
+ ---
537
+
538
+ **Questions?** Open an issue on GitHub with logs and configuration details.
539
+
540
+ **Status:** ✅ Phase 2 Complete - Production Ready
541
+ **Recommended For:** Medium to large mesh deployments (10-100+ nodes)
542
+ **Risk:** Low (backward compatible, well-tested)
543
+ **Value:** High (scalability + professional monitoring)
package/docs/README.md CHANGED
@@ -1,71 +1,78 @@
1
- # painlessMesh Documentation
2
-
3
- Welcome to the comprehensive documentation for painlessMesh - a user-friendly ESP8266/ESP32 mesh networking library that automatically handles routing and network management.
4
-
5
- ## Documentation Structure
6
-
7
- ### Getting Started
8
- - [Quick Start Guide](getting-started/quickstart.md) - Get up and running in minutes
9
- - [Installation](getting-started/installation.md) - Detailed installation instructions
10
- - [First Mesh Network](getting-started/first-mesh.md) - Your first working mesh
11
-
12
- ### Architecture & Design
13
- - [Mesh Architecture](architecture/mesh-architecture.md) - How painlessMesh works internally
14
- - [Plugin System](architecture/plugin-system.md) - Understanding the plugin architecture
15
- - [Message Routing](architecture/routing.md) - Message routing algorithms and strategies
16
- - [Time Synchronization](architecture/time-sync.md) - Mesh-wide time synchronization
17
-
18
- ### API Reference
19
- - [Core API](api/core-api.md) - Main painlessMesh class methods
20
- - [Plugin API](api/plugin-api.md) - Creating custom packages and plugins
21
- - [Configuration](api/configuration.md) - Configuration options and constants
22
- - [Callbacks](api/callbacks.md) - Event handling and callbacks
23
-
24
- ### Tutorials & Examples
25
- - [Basic Examples](tutorials/basic-examples.md) - Simple mesh networking examples
26
- - [Custom Packages](tutorials/custom-packages.md) - Creating your own message types
27
- - [Sensor Networks](tutorials/sensor-networks.md) - Building IoT sensor networks
28
- - [Bridge Applications](tutorials/bridge-apps.md) - Connecting mesh to external networks
29
-
30
- ### Alteriom Extensions
31
- - [Alteriom Overview](alteriom/overview.md) - Alteriom-specific functionality
32
- - [Sensor Packages](alteriom/sensor-packages.md) - Environmental sensor data handling
33
- - [Command System](alteriom/command-system.md) - Device command and control
34
- - [Status Monitoring](alteriom/status-monitoring.md) - Device health and diagnostics
35
-
36
- ### Advanced Topics
37
- - [Performance Optimization](advanced/performance.md) - Optimizing mesh performance
38
- - [Memory Management](advanced/memory.md) - Managing ESP8266/ESP32 memory constraints
39
- - [Security Considerations](advanced/security.md) - Securing your mesh network
40
- - [OTA Updates](advanced/ota.md) - Over-the-air firmware updates in mesh
41
-
42
- ### Troubleshooting
43
- - [Common Issues](troubleshooting/common-issues.md) - Solutions to frequent problems
44
- - [Debugging Guide](troubleshooting/debugging.md) - Tools and techniques for debugging
45
- - [FAQ](troubleshooting/faq.md) - Frequently asked questions
46
- - [Network Issues](troubleshooting/network-issues.md) - Connectivity and mesh topology problems
47
-
48
- ### Development
49
- - [Contributing](development/contributing.md) - How to contribute to painlessMesh
50
- - [Building & Testing](development/building.md) - Development environment setup
51
- - [Documentation](development/documentation.md) - Contributing to documentation
52
- - [Release Process](development/releases.md) - Understanding releases and versioning
53
-
54
- ## Quick Links
55
-
56
- - **[GitHub Repository](https://github.com/Alteriom/painlessMesh)**
57
- - **[API Documentation](http://painlessmesh.gitlab.io/painlessMesh/index.html)**
58
- - **[Community Forum](https://groups.google.com/forum/#!forum/painlessmesh-user)**
59
- - **[Issue Tracker](https://github.com/Alteriom/painlessMesh/issues)**
60
-
61
- ## Need Help?
62
-
63
- - Start with the [Quick Start Guide](getting-started/quickstart.md)
64
- - Check the [FAQ](troubleshooting/faq.md) for common questions
65
- - Browse [Examples](tutorials/basic-examples.md) for practical use cases
66
- - Join our [Community Forum](https://groups.google.com/forum/#!forum/painlessmesh-user)
67
- - Report bugs on the [Issue Tracker](https://github.com/Alteriom/painlessMesh/issues)
68
-
69
- ---
70
-
1
+ # painlessMesh Documentation
2
+
3
+ Welcome to the comprehensive documentation for painlessMesh - a user-friendly ESP8266/ESP32 mesh networking library that automatically handles routing and network management.
4
+
5
+ ## Documentation Structure
6
+
7
+ ### Getting Started
8
+ - [Quick Start Guide](getting-started/quickstart.md) - Get up and running in minutes
9
+ - [Installation](getting-started/installation.md) - Detailed installation instructions
10
+ - [First Mesh Network](getting-started/first-mesh.md) - Your first working mesh
11
+
12
+ ### Architecture & Design
13
+ - [Mesh Architecture](architecture/mesh-architecture.md) - How painlessMesh works internally
14
+ - [Plugin System](architecture/plugin-system.md) - Understanding the plugin architecture
15
+ - [Message Routing](architecture/routing.md) - Message routing algorithms and strategies
16
+ - [Time Synchronization](architecture/time-sync.md) - Mesh-wide time synchronization
17
+
18
+ ### API Reference
19
+ - [Core API](api/core-api.md) - Main painlessMesh class methods
20
+ - [Plugin API](api/plugin-api.md) - Creating custom packages and plugins
21
+ - [Configuration](api/configuration.md) - Configuration options and constants
22
+ - [Callbacks](api/callbacks.md) - Event handling and callbacks
23
+
24
+ ### Tutorials & Examples
25
+ - [Basic Examples](tutorials/basic-examples.md) - Simple mesh networking examples
26
+ - [Custom Packages](tutorials/custom-packages.md) - Creating your own message types
27
+ - [Sensor Networks](tutorials/sensor-networks.md) - Building IoT sensor networks
28
+ - [Bridge Applications](tutorials/bridge-apps.md) - Connecting mesh to external networks
29
+
30
+ ### Alteriom Extensions
31
+ - [Alteriom Overview](alteriom/overview.md) - Alteriom-specific functionality
32
+ - [Sensor Packages](alteriom/sensor-packages.md) - Environmental sensor data handling
33
+ - [Command System](alteriom/command-system.md) - Device command and control
34
+ - [Status Monitoring](alteriom/status-monitoring.md) - Device health and diagnostics
35
+
36
+ ### Advanced Topics
37
+ - [Performance Optimization](advanced/performance.md) - Optimizing mesh performance
38
+ - [Memory Management](advanced/memory.md) - Managing ESP8266/ESP32 memory constraints
39
+ - [Security Considerations](advanced/security.md) - Securing your mesh network
40
+ - [OTA Updates](advanced/ota.md) - Over-the-air firmware updates in mesh
41
+
42
+ ### Troubleshooting
43
+ - [Common Issues](troubleshooting/common-issues.md) - Solutions to frequent problems
44
+ - [Debugging Guide](troubleshooting/debugging.md) - Tools and techniques for debugging
45
+ - [FAQ](troubleshooting/faq.md) - Frequently asked questions
46
+ - [Network Issues](troubleshooting/network-issues.md) - Connectivity and mesh topology problems
47
+
48
+ ### Development
49
+ - [Contributing](development/contributing.md) - How to contribute to painlessMesh
50
+ - [Building & Testing](development/building.md) - Development environment setup
51
+ - [Documentation](development/documentation.md) - Contributing to documentation
52
+ - [Release Process](development/releases.md) - Understanding releases and versioning
53
+
54
+ ### Improvements & Proposals
55
+ - [Library Improvements](improvements/README.md) - Overview of performance and security enhancements
56
+ - **[Feature Proposals: OTA & Status](improvements/FEATURE_PROPOSALS.md)** 🆕 - Comprehensive proposals for OTA distribution and mesh status monitoring
57
+ - [Full Analysis](improvements/ota-and-status-enhancements.md) - Detailed exploration of 10+ enhancement options
58
+ - [Quick Reference](improvements/ota-status-quick-reference.md) - TL;DR with decision guides
59
+ - [Architecture Diagrams](improvements/ota-status-architecture-diagrams.md) - Visual diagrams of each option
60
+
61
+ ## Quick Links
62
+
63
+ - **[GitHub Repository](https://github.com/Alteriom/painlessMesh)**
64
+ - **[API Documentation](http://painlessmesh.gitlab.io/painlessMesh/index.html)**
65
+ - **[Community Forum](https://groups.google.com/forum/#!forum/painlessmesh-user)**
66
+ - **[Issue Tracker](https://github.com/Alteriom/painlessMesh/issues)**
67
+
68
+ ## Need Help?
69
+
70
+ - Start with the [Quick Start Guide](getting-started/quickstart.md)
71
+ - Check the [FAQ](troubleshooting/faq.md) for common questions
72
+ - Browse [Examples](tutorials/basic-examples.md) for practical use cases
73
+ - Join our [Community Forum](https://groups.google.com/forum/#!forum/painlessmesh-user)
74
+ - Report bugs on the [Issue Tracker](https://github.com/Alteriom/painlessMesh/issues)
75
+
76
+ ---
77
+
71
78
  This documentation is maintained by the painlessMesh community. Contributions are welcome! See our [Documentation Contributing Guide](development/documentation.md) to get started.