@alteriom/painlessmesh 1.8.14 → 1.9.0

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 (208) hide show
  1. package/BRIDGE_TO_INTERNET.md +229 -0
  2. package/CHANGELOG.md +89 -1
  3. package/CONTRIBUTING.md +79 -0
  4. package/README.md +70 -143
  5. package/docs/README.md +1 -0
  6. package/docs/api/shared-gateway.md +1207 -0
  7. package/docs/troubleshooting/common-issues.md +28 -0
  8. package/docs/troubleshooting/faq.md +113 -12
  9. package/examples/basic/test/simulator/CMakeLists.txt +40 -0
  10. package/examples/basic/test/simulator/README.md +149 -0
  11. package/examples/basic/test/simulator/firmware/basic_firmware.hpp +117 -0
  12. package/examples/basic/test/simulator/scenarios/basic_mesh_test.yaml +81 -0
  13. package/examples/bridge/bridge.ino +17 -4
  14. package/examples/bridge_failover/README.md +81 -0
  15. package/examples/bridge_failover/bridge_failover.ino +51 -6
  16. package/examples/sharedGateway/README.md +235 -0
  17. package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
  18. package/examples/sharedGateway/sharedGateway.ino +303 -0
  19. package/library.json +3 -22
  20. package/library.properties +1 -1
  21. package/package.json +3 -3
  22. package/src/arduino/wifi.hpp +380 -13
  23. package/src/painlessmesh/gateway.hpp +2120 -0
  24. package/src/painlessmesh/mesh.hpp +1034 -6
  25. package/src/painlessmesh/message_tracker.hpp +311 -0
  26. package/src/painlessmesh/protocol.hpp +6 -0
  27. package/DOCUMENTATION_INDEX.md +0 -146
  28. package/docs/API_DESIGN_GUIDELINES.md +0 -414
  29. package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
  30. package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
  31. package/docs/BRIDGE_FAILOVER.md +0 -512
  32. package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
  33. package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
  34. package/docs/CREATE_MISSING_RELEASES.md +0 -321
  35. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
  36. package/docs/FAQ_VERSION_NUMBERS.md +0 -152
  37. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
  38. package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
  39. package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
  40. package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
  41. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
  42. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
  43. package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
  44. package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
  45. package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
  46. package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
  47. package/docs/PHASE1_GUIDE.md +0 -349
  48. package/docs/PHASE2_GUIDE.md +0 -543
  49. package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
  50. package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
  51. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
  52. package/docs/VERSION_MANAGEMENT.md +0 -213
  53. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
  54. package/docs/archive/FEATURE_PROPOSALS.md +0 -337
  55. package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
  56. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
  57. package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
  58. package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
  59. package/docs/archive/RELEASE_SUMMARY.md +0 -173
  60. package/docs/archive/SCONS_BUILD_FIX.md +0 -313
  61. package/docs/archive/TRIGGER_RELEASE.md +0 -280
  62. package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
  63. package/docs/archive/ota-and-status-enhancements.md +0 -911
  64. package/docs/archive/ota-status-architecture-diagrams.md +0 -658
  65. package/docs/archive/ota-status-quick-reference.md +0 -284
  66. package/docs/design/.gitkeep +0 -1
  67. package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
  68. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
  69. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
  70. package/docs/development/DOCKER_TESTING.md +0 -196
  71. package/docs/development/PLATFORMIO_USAGE.md +0 -180
  72. package/docs/development/TESTING_SUMMARY.md +0 -126
  73. package/docs/development/contributing.md +0 -301
  74. package/docs/development/documentation.md +0 -583
  75. package/docs/features/DIAGNOSTICS_API.md +0 -534
  76. package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
  77. package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
  78. package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
  79. package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
  80. package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
  81. package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
  82. package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
  83. package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
  84. package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
  85. package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
  86. package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
  87. package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
  88. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
  89. package/docs/improvements/README.md +0 -212
  90. package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
  91. package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
  92. package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
  93. package/docs/internal/ISSUE_66_STATUS.md +0 -316
  94. package/docs/internal/PR_SUMMARY.md +0 -315
  95. package/docs/internal/REVIEW_SUMMARY.md +0 -332
  96. package/docs/multi-bridge-setup.md +0 -1025
  97. package/docs/platformio-publishing.md +0 -255
  98. package/docs/platformio-setup-summary.md +0 -121
  99. package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
  100. package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
  101. package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
  102. package/docs/releases/FEATURE_HISTORY.md +0 -543
  103. package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
  104. package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
  105. package/docs/releases/PATCH_v1.7.2.md +0 -262
  106. package/docs/releases/PATCH_v1.7.3.md +0 -262
  107. package/docs/releases/PATCH_v1.7.4.md +0 -219
  108. package/docs/releases/PHASE1_SUMMARY.md +0 -246
  109. package/docs/releases/PHASE2_SUMMARY.md +0 -499
  110. package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
  111. package/docs/releases/QUICK_START_RELEASES.md +0 -113
  112. package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
  113. package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
  114. package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
  115. package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
  116. package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
  117. package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
  118. package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
  119. package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
  120. package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
  121. package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
  122. package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
  123. package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
  124. package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
  125. package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
  126. package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
  127. package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
  128. package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
  129. package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
  130. package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
  131. package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
  132. package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
  133. package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
  134. package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
  135. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
  136. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
  137. package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
  138. package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
  139. package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
  140. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
  141. package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
  142. package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
  143. package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
  144. package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
  145. package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
  146. package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
  147. package/docs/troubleshooting/station-reconnection-issues.md +0 -172
  148. package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
  149. package/docs/wiki/API-Reference.md +0 -246
  150. package/docs/wiki/Complete-Documentation.md +0 -123
  151. package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
  152. package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
  153. package/examples/alteriomImproved/platformio.ini +0 -32
  154. package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
  155. package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
  156. package/examples/alteriomMetricsHealth/platformio.ini +0 -26
  157. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
  158. package/examples/alteriomPhase1/phase1_features.ino +0 -242
  159. package/examples/alteriomPhase1/platformio.ini +0 -26
  160. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
  161. package/examples/alteriomPhase2/phase2_features.ino +0 -186
  162. package/examples/alteriomPhase2/platformio.ini +0 -26
  163. package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
  164. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
  165. package/examples/alteriomSensorNode/platformio.ini +0 -26
  166. package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
  167. package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
  168. package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
  169. package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
  170. package/examples/bridge/mesh_event_publisher.hpp +0 -253
  171. package/examples/bridge/mesh_topology_reporter.hpp +0 -303
  172. package/examples/bridge/mqtt_command_bridge.hpp +0 -459
  173. package/examples/bridge/mqtt_status_bridge.hpp +0 -519
  174. package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
  175. package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
  176. package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
  177. package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
  178. package/examples/diagnosticsExample/platformio.ini +0 -26
  179. package/examples/echoNode/echoNode.ino +0 -33
  180. package/examples/echoNode/platformio.ini +0 -26
  181. package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
  182. package/examples/meshCommandNode/meshCommandNode.ino +0 -265
  183. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
  184. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
  185. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
  186. package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
  187. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
  188. package/examples/mqttCommandBridge/platformio.ini +0 -27
  189. package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
  190. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
  191. package/examples/mqttStatusBridge/platformio.ini +0 -27
  192. package/examples/mqttTopologyTest/README.md +0 -467
  193. package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
  194. package/examples/mqttTopologyTest/platformio.ini +0 -27
  195. package/examples/multi_bridge/README.md +0 -346
  196. package/examples/multi_bridge/primary_bridge.ino +0 -96
  197. package/examples/multi_bridge/regular_node.ino +0 -141
  198. package/examples/multi_bridge/secondary_bridge.ino +0 -111
  199. package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
  200. package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
  201. package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
  202. package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
  203. package/examples/queued_alarms/README.md +0 -390
  204. package/examples/queued_alarms/queued_alarms.ino +0 -265
  205. package/examples/routing_demo/README.md +0 -172
  206. package/examples/routing_demo/routing_demo.ino +0 -102
  207. package/examples/rtcIntegration/README.md +0 -294
  208. package/examples/rtcIntegration/rtcIntegration.ino +0 -210
@@ -1,543 +0,0 @@
1
- # Alteriom painlessMesh Feature History
2
-
3
- This document chronicles the major feature development phases that transformed
4
- painlessMesh into a production-ready, enterprise-grade mesh networking library.
5
-
6
- ## Quick Navigation
7
-
8
- - [Phase 1 (v1.6.x)](#phase-1-ota-infrastructure--enhanced-monitoring) - OTA Infrastructure & Enhanced Monitoring
9
- - [Phase 2 (v1.7.x)](#phase-2-broadcast-ota--mqtt-bridge) - Broadcast OTA & MQTT Bridge
10
- - [Feature Comparison](#feature-comparison-matrix)
11
- - [Migration Guide](#migration-guide)
12
- - [Performance Metrics](#performance-metrics)
13
-
14
- ---
15
-
16
- ## Phase 1: OTA Infrastructure & Enhanced Monitoring
17
-
18
- **Release:** v1.6.x | **Date:** December 2024 | **Status:** ✅ Complete
19
-
20
- ### Overview
21
-
22
- Phase 1 established the foundation for efficient OTA updates and comprehensive
23
- device monitoring, focusing on infrastructure and backward compatibility.
24
-
25
- ### Features Implemented
26
-
27
- #### 1. Compressed OTA Transfer
28
-
29
- **Description:** Infrastructure for bandwidth-efficient firmware distribution
30
- using compression flags.
31
-
32
- **Key Changes:**
33
-
34
- - Added `compressed` boolean flag to OTA message classes
35
- - Extended `offerOTA()` API to accept compression parameter
36
- - Full JSON serialization support for ArduinoJson 6 and 7
37
- - Foundation for 40-60% bandwidth reduction
38
-
39
- **Usage:**
40
-
41
- ```cpp
42
- // Enable compressed OTA (40-60% bandwidth savings)
43
- mesh.offerOTA("sensor", "ESP32", md5, parts, false, false, true);
44
- // ^^^^^ ^^^^^ ^^^^
45
- // forced bcast compress
46
- ```
47
-
48
- **Benefits:**
49
-
50
- - 40-60% bandwidth reduction (with compression library)
51
- - Faster firmware distribution
52
- - Lower energy consumption
53
- - Works with all distribution methods
54
-
55
- #### 2. Enhanced Status Package
56
-
57
- **Description:** Comprehensive device and mesh monitoring with 18 standardized
58
- fields for professional monitoring integration.
59
-
60
- **Key Changes:**
61
-
62
- - Created `EnhancedStatusPackage` class (Type ID 203)
63
- - 18 comprehensive fields:
64
- - Device health (uptime, memory, WiFi, firmware)
65
- - Mesh statistics (nodes, connections, messages)
66
- - Performance metrics (latency, packet loss, throughput)
67
- - Alert system (bit flags + error messages)
68
-
69
- **Usage:**
70
-
71
- ```cpp
72
- alteriom::EnhancedStatusPackage status;
73
- status.uptime = millis() / 1000;
74
- status.freeMemory = ESP.getFreeHeap() / 1024;
75
- status.nodeCount = mesh.getNodeList().size();
76
- status.messagesReceived = getTotalRx();
77
- status.avgLatency = getAverageLatency();
78
-
79
- String msg;
80
- protocol::Variant(&status).printTo(msg);
81
- mesh.sendBroadcast(msg);
82
- ```
83
-
84
- **Benefits:**
85
-
86
- - Comprehensive device and mesh monitoring
87
- - Proactive alert system
88
- - Standardized format across all Alteriom nodes
89
- - Ready for dashboard integration
90
-
91
- ### Files Modified
92
-
93
- **Core Library (3 files):**
94
-
95
- - `src/painlessmesh/ota.hpp` - Compressed flag support
96
- - `src/painlessmesh/mesh.hpp` - Extended API
97
- - `examples/alteriom/alteriom_sensor_package.hpp` - EnhancedStatusPackage
98
-
99
- **Tests (1 file):**
100
-
101
- - `test/catch/catch_alteriom_packages.cpp` - 80 assertions, all passing
102
-
103
- **Documentation (3 files):**
104
-
105
- - `docs/PHASE1_GUIDE.md` - User guide
106
- - `docs/improvements/PHASE1_IMPLEMENTATION.md` - Technical details
107
- - `examples/alteriom/phase1_features.ino` - Working example
108
-
109
- ### Performance Impact
110
-
111
- | Metric | Compressed OTA | Enhanced Status |
112
- |--------|----------------|-----------------|
113
- | Memory Overhead | +4-8KB (buffer) | +500 bytes |
114
- | Bandwidth Savings | 40-60% | N/A |
115
- | Update Time | 35-70s (vs 60-120s) | N/A |
116
- | Message Size | N/A | ~1.5KB |
117
- | CPU Overhead | Minimal | Negligible |
118
- | Recommended Interval | Per update | 30-60 seconds |
119
-
120
- ### Success Criteria
121
-
122
- - ✅ Compressed OTA flag infrastructure in place
123
- - ✅ Enhanced status package with 18 comprehensive fields
124
- - ✅ Full backward compatibility maintained
125
- - ✅ Complete test coverage (80 assertions passing)
126
- - ✅ Comprehensive documentation written
127
- - ✅ Working examples provided
128
- - ✅ No breaking changes to existing APIs
129
-
130
- ---
131
-
132
- ## Phase 2: Broadcast OTA & MQTT Bridge
133
-
134
- **Release:** v1.7.0 | **Date:** December 2024 | **Status:** ✅ Complete
135
-
136
- ### Overview
137
-
138
- Phase 2 introduced true mesh-wide broadcast distribution and professional
139
- monitoring capabilities, enabling enterprise-grade deployments at scale.
140
-
141
- ### Features Implemented
142
-
143
- #### 1. Broadcast OTA Distribution
144
-
145
- **Description:** Revolutionary firmware distribution where chunks are broadcast
146
- once to all nodes simultaneously, dramatically reducing network traffic.
147
-
148
- **Key Changes:**
149
-
150
- - Enhanced `Data::replyTo()` to set BROADCAST routing when `broadcasted=true`
151
- - Sender broadcasts each chunk once to all nodes
152
- - Automatic fallback to unicast for reliability
153
- - Parallel distribution to 50-100+ nodes
154
-
155
- **Usage:**
156
-
157
- ```cpp
158
- // Enable broadcast mode (Phase 2 feature)
159
- mesh.offerOTA("sensor", "ESP32", md5, parts, false, true, true);
160
- // ^^^^ ^^^^
161
- // broadcast compress
162
- ```
163
-
164
- **Benefits:**
165
-
166
- - **98% network traffic reduction** for 50-node mesh
167
- - **Parallel distribution** - All nodes receive simultaneously
168
- - **O(F) time complexity** vs O(N×F) for unicast
169
- - **Memory efficient** - Only +2-5KB per node
170
- - **Scales to 50-100+ nodes** effectively
171
-
172
- **Performance:**
173
-
174
- | Mesh Size | Unicast Transmissions | Broadcast Transmissions | Reduction |
175
- |-----------|----------------------|------------------------|-----------|
176
- | 10 nodes | 1,500 | 150 | 90% |
177
- | 50 nodes | 7,500 | 150 | 98% |
178
- | 100 nodes | 15,000 | 150 | 99% |
179
-
180
- *Example: 150-chunk firmware update*
181
-
182
- #### 2. MQTT Status Bridge
183
-
184
- **Description:** Professional monitoring solution that publishes comprehensive
185
- mesh status to MQTT for integration with Grafana, InfluxDB, Prometheus, and
186
- other enterprise monitoring tools.
187
-
188
- **Key Changes:**
189
-
190
- - Created `MqttStatusBridge` class
191
- - Publishes to 5 MQTT topic streams:
192
- - `mesh/status/nodes` - Node list with count
193
- - `mesh/status/topology` - Complete mesh structure JSON
194
- - `mesh/status/metrics` - Performance statistics
195
- - `mesh/status/alerts` - Active alert conditions
196
- - `mesh/status/node/{id}` - Per-node detailed status (optional)
197
-
198
- **Usage:**
199
-
200
- ```cpp
201
- #include "examples/bridge/mqtt_status_bridge.hpp"
202
-
203
- MqttStatusBridge bridge(mesh, mqttClient);
204
- bridge.setPublishInterval(30000); // 30 seconds
205
- bridge.enableTopology(true);
206
- bridge.enableMetrics(true);
207
- bridge.enableAlerts(true);
208
- bridge.begin();
209
- ```
210
-
211
- **Benefits:**
212
-
213
- - **Professional monitoring tools** - Grafana, InfluxDB, Prometheus
214
- - **Cloud integration** via MQTT
215
- - **Real-time visibility** into mesh health
216
- - **Automated alerting** for critical conditions
217
- - **Configurable** - Enable/disable features, set intervals
218
- - **Scalable** - Efficient even with 50+ nodes
219
-
220
- **Integration Ready:**
221
-
222
- - Grafana dashboards for visualization
223
- - InfluxDB/Telegraf for time-series storage
224
- - Prometheus exporters for metrics
225
- - Home Assistant for automation
226
- - Node-RED for custom processing
227
-
228
- ### Files Modified
229
-
230
- **Core Library (1 file):**
231
-
232
- - `src/painlessmesh/ota.hpp` - Broadcast OTA mode
233
-
234
- **New Components (2 files):**
235
-
236
- - `examples/bridge/mqtt_status_bridge.hpp` - Bridge implementation
237
- - `examples/bridge/mqtt_status_bridge_example.ino` - Complete example
238
-
239
- **Examples (1 file):**
240
-
241
- - `examples/alteriom/phase2_features.ino` - Phase 2 demo
242
-
243
- **Documentation (2 files):**
244
-
245
- - `docs/PHASE2_GUIDE.md` - User guide (~500 lines)
246
- - `docs/improvements/PHASE2_IMPLEMENTATION.md` - Technical details (~600 lines)
247
-
248
- ### Performance Impact
249
-
250
- **Broadcast OTA:**
251
-
252
- | Metric | Small (10 nodes) | Medium (50 nodes) | Large (100 nodes) |
253
- |--------|------------------|-------------------|-------------------|
254
- | Traffic Reduction | 90% | 98% | 99% |
255
- | Update Time | ~10x faster | ~50x faster | ~100x faster |
256
- | Memory per Node | +2-5KB | +2-5KB | +2-5KB |
257
-
258
- **MQTT Status Bridge:**
259
-
260
- | Metric | Minimal Config | Standard Config | Full Config |
261
- |--------|----------------|-----------------|-------------|
262
- | Memory (root node) | +5-8KB | +5-8KB | +5-8KB |
263
- | MQTT Traffic/interval | ~500 bytes | ~2-3KB | ~10KB (50 nodes) |
264
- | Other nodes | 0 bytes | 0 bytes | 0 bytes |
265
-
266
- **Recommended Intervals:**
267
-
268
- - Small mesh (<10 nodes): 30 seconds
269
- - Medium mesh (10-50 nodes): 60 seconds
270
- - Large mesh (50+ nodes): 120 seconds
271
-
272
- ### Success Criteria
273
-
274
- - ✅ Broadcast OTA scales to 50-100+ nodes
275
- - ✅ ~98% network traffic reduction demonstrated
276
- - ✅ MQTT Status Bridge production-ready
277
- - ✅ Professional monitoring tool integration enabled
278
- - ✅ Full backward compatibility maintained
279
- - ✅ Comprehensive documentation written
280
- - ✅ Working examples provided
281
- - ✅ No breaking changes
282
-
283
- ---
284
-
285
- ## Feature Comparison Matrix
286
-
287
- ### OTA Distribution Methods
288
-
289
- | Feature | Base | Phase 1 | Phase 2 |
290
- |---------|------|---------|---------|
291
- | Unicast OTA | ✅ | ✅ | ✅ |
292
- | Compressed Flag | ❌ | ✅ | ✅ |
293
- | Broadcast Distribution | ❌ | ❌ | ✅ |
294
- | Network Efficiency | Baseline | +40-60% | +90-99% |
295
- | Max Practical Nodes | 5-10 | 10-20 | 50-100+ |
296
- | Update Time Complexity | O(N×F) | O(N×F) | O(F) |
297
-
298
- ### Monitoring & Status
299
-
300
- | Feature | Base | Phase 1 | Phase 2 |
301
- |---------|------|---------|---------|
302
- | Basic Status | ✅ | ✅ | ✅ |
303
- | Enhanced Status | ❌ | ✅ | ✅ |
304
- | MQTT Bridge | ❌ | ❌ | ✅ |
305
- | Grafana Integration | ❌ | ❌ | ✅ |
306
- | Alert System | ❌ | ✅ | ✅ |
307
- | Cloud Connectivity | ❌ | ❌ | ✅ |
308
-
309
- ### Backward Compatibility
310
-
311
- | Base Code | Phase 1 | Phase 2 | Breaking Changes |
312
- |-----------|---------|---------|------------------|
313
- | ✅ Works | ✅ Works | ✅ Works | ❌ None |
314
- | Phase 1 Code | N/A | ✅ Works | ❌ None |
315
- | Phase 2 Code | ❌ | ❌ | N/A |
316
-
317
- ---
318
-
319
- ## Migration Guide
320
-
321
- ### From Base to Phase 1
322
-
323
- **No changes required** - All defaults preserve base behavior.
324
-
325
- **Optional: Enable Compression**
326
-
327
- ```cpp
328
- // Before
329
- mesh.offerOTA(role, hardware, md5, parts);
330
-
331
- // After - add compression flag
332
- mesh.offerOTA(role, hardware, md5, parts, false, false, true);
333
- ```
334
-
335
- **Optional: Use Enhanced Status**
336
-
337
- ```cpp
338
- // Before
339
- alteriom::StatusPackage status;
340
- status.uptime = millis() / 1000;
341
-
342
- // After - use enhanced package
343
- alteriom::EnhancedStatusPackage status;
344
- status.uptime = millis() / 1000;
345
- status.nodeCount = mesh.getNodeList().size(); // New field
346
- ```
347
-
348
- ### From Phase 1 to Phase 2
349
-
350
- **No changes required** - All Phase 1 code continues to work.
351
-
352
- **Optional: Enable Broadcast OTA**
353
-
354
- ```cpp
355
- // Phase 1
356
- mesh.offerOTA(role, hardware, md5, parts, false, false, true);
357
-
358
- // Phase 2 - add broadcast flag
359
- mesh.offerOTA(role, hardware, md5, parts, false, true, true);
360
- // ^^^^
361
- ```
362
-
363
- **Optional: Add MQTT Bridge**
364
-
365
- ```cpp
366
- #include "examples/bridge/mqtt_status_bridge.hpp"
367
-
368
- MqttStatusBridge bridge(mesh, mqttClient);
369
- bridge.setPublishInterval(30000);
370
- bridge.begin();
371
- ```
372
-
373
- ### Combined Usage (All Features)
374
-
375
- ```cpp
376
- // Use all features together for maximum efficiency
377
-
378
- // Phase 1 + Phase 2: Broadcast + Compressed OTA
379
- mesh.offerOTA(role, hw, md5, parts, false, true, true);
380
-
381
- // Phase 1: Enhanced Status Package
382
- alteriom::EnhancedStatusPackage status;
383
- status.uptime = millis() / 1000;
384
- status.nodeCount = mesh.getNodeList().size();
385
- mesh.sendBroadcast(status.toJsonString());
386
-
387
- // Phase 2: MQTT Status Bridge
388
- MqttStatusBridge bridge(mesh, mqttClient);
389
- bridge.begin();
390
- ```
391
-
392
- ---
393
-
394
- ## Performance Metrics
395
-
396
- ### Network Traffic Comparison
397
-
398
- **Scenario:** 150-chunk firmware update to N nodes
399
-
400
- | Nodes | Base (Unicast) | Phase 1 (Compressed) | Phase 2 (Broadcast) |
401
- |-------|----------------|----------------------|---------------------|
402
- | 5 | 750 tx | 450 tx (-40%) | 150 tx (-80%) |
403
- | 10 | 1,500 tx | 900 tx (-40%) | 150 tx (-90%) |
404
- | 20 | 3,000 tx | 1,800 tx (-40%) | 150 tx (-95%) |
405
- | 50 | 7,500 tx | 4,500 tx (-40%) | 150 tx (-98%) |
406
- | 100 | 15,000 tx | 9,000 tx (-40%) | 150 tx (-99%) |
407
-
408
- ### Update Time Comparison
409
-
410
- **Scenario:** 150 chunks × 100ms transmission time = 15 seconds per node (unicast)
411
-
412
- | Nodes | Base (Sequential) | Phase 2 (Parallel) | Speedup |
413
- |-------|-------------------|-------------------|---------|
414
- | 5 | 75 seconds | 15 seconds | 5x |
415
- | 10 | 150 seconds | 15 seconds | 10x |
416
- | 20 | 300 seconds | 15 seconds | 20x |
417
- | 50 | 750 seconds | 15 seconds | 50x |
418
- | 100 | 1,500 seconds | 15 seconds | 100x |
419
-
420
- ### Memory Usage
421
-
422
- | Feature | ESP8266 | ESP32 | Notes |
423
- |---------|---------|-------|-------|
424
- | Base | ~40KB | ~50KB | Baseline |
425
- | Phase 1 Compression | +4-8KB | +4-8KB | Decompression buffer |
426
- | Phase 1 Enhanced Status | +500 bytes | +500 bytes | Per status report |
427
- | Phase 2 Broadcast | +2-5KB | +2-5KB | Chunk tracking |
428
- | Phase 2 MQTT Bridge | N/A | +5-8KB | Root node only |
429
-
430
- ---
431
-
432
- ## Recommended Usage
433
-
434
- ### When to Use Each Phase
435
-
436
- **Phase 1 (Compressed OTA + Enhanced Status):**
437
-
438
- ✅ Recommended for:
439
-
440
- - Any production deployment
441
- - Memory-constrained devices (ESP8266)
442
- - Bandwidth optimization without complexity
443
- - Comprehensive device monitoring
444
-
445
- **Phase 2 (Broadcast OTA + MQTT Bridge):**
446
-
447
- ✅ Recommended for:
448
-
449
- - Meshes with 10+ nodes
450
- - All nodes need same firmware
451
- - Fast distribution is critical
452
- - Enterprise monitoring requirements
453
- - Cloud integration needs
454
- - Large-scale deployments (50-100+ nodes)
455
-
456
- ❌ Not recommended for:
457
-
458
- - Very small meshes (<5 nodes) - overhead not justified
459
- - Heterogeneous firmware - different firmware per node
460
- - Pure offline systems - MQTT requires external network
461
-
462
- ---
463
-
464
- ## Known Limitations
465
-
466
- ### Phase 1
467
-
468
- 1. **Compression library not integrated** - `compressed` flag is infrastructure only
469
- 2. **Manual metrics collection** - EnhancedStatusPackage fields must be manually populated
470
- 3. **Basic alert system** - Alert flag meanings are conventional, not enforced
471
-
472
- ### Phase 2
473
-
474
- 1. **Broadcast no per-node targeting** - All nodes receive all chunks
475
- - Workaround: Use role/hardware filtering
476
- 2. **Network reliability** - Broadcast packets may be dropped
477
- - Mitigation: Automatic fallback to unicast
478
- 3. **MQTT single point of failure** - Bridge node must remain online
479
- - Mitigation: Use reliable hardware for bridge
480
-
481
- ---
482
-
483
- ## Future Phases
484
-
485
- ### Phase 3 (Planned)
486
-
487
- According to FEATURE_PROPOSALS.md:
488
-
489
- - Progressive Rollout OTA - Phased deployment with health checks
490
- - Real-time Telemetry Streams - Continuous metrics streaming
491
- - Proactive Alerting System - Automated anomaly detection
492
- - Large-scale Mesh Support - 100+ nodes optimization
493
-
494
- ### Long-term Enhancements
495
-
496
- - Chunk bitmap tracking for better reliability
497
- - Adaptive rate limiting based on mesh congestion
498
- - MQTT command/control interface
499
- - Remote OTA triggering via MQTT
500
- - Integration with cloud platforms (AWS IoT, Azure IoT)
501
-
502
- ---
503
-
504
- ## Documentation References
505
-
506
- ### User Guides
507
-
508
- - [PHASE1_GUIDE.md](PHASE1_GUIDE.md) - Phase 1 complete user guide
509
- - [PHASE2_GUIDE.md](PHASE2_GUIDE.md) - Phase 2 complete user guide
510
- - [RELEASE_NOTES_1.7.0.md](RELEASE_NOTES_1.7.0.md) - v1.7.0 detailed release notes
511
-
512
- ### Implementation Details
513
-
514
- - [PHASE1_IMPLEMENTATION.md](../improvements/PHASE1_IMPLEMENTATION.md) - Phase 1 technical details
515
- - [PHASE2_IMPLEMENTATION.md](../improvements/PHASE2_IMPLEMENTATION.md) - Phase 2 technical details
516
- - [FEATURE_PROPOSALS.md](../improvements/FEATURE_PROPOSALS.md) - Original proposals
517
-
518
- ### Examples
519
-
520
- - [examples/alteriom/phase1_features.ino](../../examples/alteriom/phase1_features.ino) - Phase 1 demo
521
- - [examples/alteriom/phase2_features.ino](../../examples/alteriom/phase2_features.ino) - Phase 2 demo
522
- - [examples/bridge/mqtt_status_bridge_example.ino](../../examples/bridge/mqtt_status_bridge_example.ino) - MQTT bridge
523
-
524
- ---
525
-
526
- ## Questions & Support
527
-
528
- 1. **Documentation:** Start with the phase-specific guides above
529
- 2. **Examples:** Check the working examples in the repository
530
- 3. **Issues:** Search [GitHub Issues](https://github.com/Alteriom/painlessMesh/issues)
531
- 4. **Discussions:** Post in [GitHub Discussions](https://github.com/Alteriom/painlessMesh/discussions)
532
- 5. **Bug Reports:** Include logs, configuration, and mesh size
533
-
534
- ---
535
-
536
- **Summary:**
537
-
538
- - **Phase 1 (v1.6.x):** Foundation - Compressed OTA + Enhanced Monitoring
539
- - **Phase 2 (v1.7.0):** Scale - Broadcast OTA + MQTT Bridge
540
- - **Result:** Production-ready library scaling to 50-100+ nodes
541
- - **All phases:** Fully backward compatible, no breaking changes
542
-
543
- **Total Value:** 98% traffic reduction + enterprise monitoring + cloud integration
@@ -1,71 +0,0 @@
1
- ## 🐛 Bug Fixes
2
-
3
- ### Bridge Failover Auto-Election (Issue #117)
4
-
5
- Fixed critical issue where mesh networks would remain bridgeless indefinitely when all nodes started without a designated initial bridge.
6
-
7
- **Before:** No initial bridge → no election → mesh stays bridgeless forever
8
- **After:** No initial bridge → 60s startup → monitoring detects absence → election triggered → best RSSI node becomes bridge
9
-
10
- #### Implementation Details
11
- - Added periodic monitoring task (30s interval) that detects absence of healthy bridge
12
- - Activates after 60s startup grace period to allow network stabilization
13
- - Randomized election delay (1-3s) prevents thundering herd problem
14
- - Respects existing safeguards: election state, 60s cooldown, router visibility
15
-
16
- Fully backward compatible - pre-designated bridge mode continues to work as before.
17
-
18
- **Core fix:** `src/arduino/wifi.hpp`
19
-
20
- ## 📝 Documentation
21
-
22
- ### Bridge Failover Example
23
-
24
- Enhanced documentation to clarify two deployment modes:
25
-
26
- - **Auto-Election Mode**: All nodes regular (`INITIAL_BRIDGE=false`), RSSI-based election after 60s
27
- - **Pre-Designated Mode**: Traditional single initial bridge setup
28
-
29
- Updated:
30
- - `examples/bridge_failover/bridge_failover.ino` - Enhanced header comments
31
- - `examples/bridge_failover/README.md` - Comprehensive auto-election documentation
32
-
33
- ## 🔧 Housekeeping
34
-
35
- - Synchronized `package-lock.json` version to 1.8.5
36
-
37
- ## 📦 Installation
38
-
39
- ### PlatformIO
40
- ```ini
41
- lib_deps = alteriom/AlteriomPainlessMesh@^1.8.6
42
- ```
43
-
44
- ### NPM
45
- ```bash
46
- npm install @alteriom/painlessmesh@1.8.6
47
- ```
48
-
49
- ### Arduino Library Manager
50
- Search for "AlteriomPainlessMesh" and update through the IDE
51
-
52
- ## 🎯 Use Cases
53
-
54
- This release is valuable for:
55
- - Dynamic mesh networks with changing node positions
56
- - Fault-tolerant deployments requiring automatic bridge recovery
57
- - IoT systems with minimal human oversight
58
- - Development environments without pre-configured bridges
59
-
60
- ## 🙏 Credits
61
-
62
- Special thanks to @woodlist for reporting the issue and providing detailed logs.
63
-
64
- ## 📚 Resources
65
-
66
- - [Full Release Notes](https://github.com/Alteriom/painlessMesh/blob/main/docs/releases/RELEASE_NOTES_v1.8.6.md)
67
- - [Bridge Failover Example](https://github.com/Alteriom/painlessMesh/tree/main/examples/bridge_failover)
68
- - [Issue #117](https://github.com/Alteriom/painlessMesh/issues/117)
69
- - [Pull Request #118](https://github.com/Alteriom/painlessMesh/pull/118)
70
-
71
- **Full Changelog**: https://github.com/Alteriom/painlessMesh/compare/v1.8.5...v1.8.6
@@ -1,90 +0,0 @@
1
- # AlteriomPainlessMesh v1.8.7
2
-
3
- **Release Date:** November 12, 2025
4
- **Type:** Patch Release - Bug Fixes & Documentation
5
-
6
- ## 🐛 Bug Fixes
7
-
8
- ### Bridge Internet Connectivity Detection
9
-
10
- Fixed incorrect internet status reporting in bridge nodes:
11
- - **Before:** Bridge → Router (with Internet) → Reports "Internet: NO" ❌
12
- - **After:** Bridge → Router (with Internet) → Reports "Internet: YES" ✅
13
-
14
- Bridge nodes now properly check for actual internet connectivity by verifying both WiFi connection status AND valid gateway IP (not 0.0.0.0).
15
-
16
- **Impact:**
17
- - ✅ Accurate internet status for bridge nodes
18
- - ✅ Correct bridge failover behavior
19
- - ✅ No more false positives on regular nodes
20
-
21
- **Files changed:** `src/arduino/wifi.hpp`
22
-
23
- ### Version Documentation Consistency
24
-
25
- Fixed confusing version numbers in header files:
26
- - Updated `painlessMesh.h` version comment: 1.8.4 → 1.8.7
27
- - Updated `AlteriomPainlessMesh.h` version defines: 1.6.1 → 1.8.7
28
- - Created comprehensive VERSION_MANAGEMENT.md documentation
29
-
30
- **Clarification:** Header file version comments indicate the library version when documentation was reviewed, not file-specific versioning. Use `library.properties` for the official version.
31
-
32
- ## 📚 New Documentation
33
-
34
- ### VERSION_MANAGEMENT.md
35
-
36
- New comprehensive guide explaining:
37
- - ✅ What version numbers in header files mean
38
- - ✅ Where to find the official library version
39
- - ✅ How to track file modification history
40
- - ✅ Version update workflow and best practices
41
-
42
- **Essential reading for contributors!**
43
-
44
- ## 📦 Installation
45
-
46
- ### Arduino Library Manager
47
- ```
48
- Sketch → Include Library → Manage Libraries →
49
- Search "AlteriomPainlessMesh" → Update to 1.8.7
50
- ```
51
-
52
- ### PlatformIO
53
- ```ini
54
- lib_deps = alteriom/AlteriomPainlessMesh@^1.8.7
55
- ```
56
-
57
- ### NPM
58
- ```bash
59
- npm install @alteriom/painlessmesh@1.8.7
60
- ```
61
-
62
- ## 🔄 Upgrade Notes
63
-
64
- **Fully backward compatible** with v1.8.6. No breaking changes.
65
-
66
- ## 📖 Documentation
67
-
68
- - **Release Notes:** [docs/releases/RELEASE_NOTES_v1.8.7.md](docs/releases/RELEASE_NOTES_v1.8.7.md)
69
- - **Version Management Guide:** [docs/VERSION_MANAGEMENT.md](docs/VERSION_MANAGEMENT.md)
70
- - **Full Changelog:** [CHANGELOG.md](CHANGELOG.md)
71
- - **Online Documentation:** https://alteriom.github.io/painlessMesh/
72
-
73
- ## 🔗 Links
74
-
75
- - **NPM Package:** https://www.npmjs.com/package/@alteriom/painlessmesh
76
- - **PlatformIO Registry:** https://registry.platformio.org/libraries/alteriom/AlteriomPainlessMesh
77
- - **Report Issues:** https://github.com/Alteriom/painlessMesh/issues
78
-
79
- ## ✅ Checksums
80
-
81
- **Library Package:** `painlessMesh-v1.8.7.zip`
82
- - Will be generated automatically by GitHub Actions
83
-
84
- ## 🙏 Credits
85
-
86
- Thanks to our users for reporting issues and helping improve the library!
87
-
88
- ---
89
-
90
- **Full Changelog:** https://github.com/Alteriom/painlessMesh/compare/v1.8.6...v1.8.7