@alteriom/painlessmesh 1.8.15 → 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 +61 -1
  3. package/CONTRIBUTING.md +79 -0
  4. package/README.md +69 -144
  5. package/docs/README.md +1 -0
  6. package/docs/api/shared-gateway.md +1207 -0
  7. package/examples/bridge_failover/README.md +81 -0
  8. package/examples/bridge_failover/bridge_failover.ino +35 -4
  9. package/examples/sharedGateway/README.md +235 -0
  10. package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
  11. package/examples/sharedGateway/sharedGateway.ino +303 -0
  12. package/library.json +3 -22
  13. package/library.properties +1 -1
  14. package/package.json +3 -6
  15. package/src/arduino/wifi.hpp +342 -4
  16. package/src/painlessmesh/gateway.hpp +2120 -0
  17. package/src/painlessmesh/mesh.hpp +1034 -6
  18. package/src/painlessmesh/message_tracker.hpp +311 -0
  19. package/src/painlessmesh/protocol.hpp +6 -0
  20. package/DOCUMENTATION_INDEX.md +0 -146
  21. package/RELEASE_NOTES_1.8.15.md +0 -160
  22. package/RELEASE_READINESS_PLAN.md +0 -323
  23. package/TESTING_WITH_SIMULATOR.md +0 -259
  24. package/docs/API_DESIGN_GUIDELINES.md +0 -414
  25. package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
  26. package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
  27. package/docs/BRIDGE_FAILOVER.md +0 -512
  28. package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
  29. package/docs/BRIDGE_INITIALIZATION_FALLBACK.md +0 -357
  30. package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
  31. package/docs/CREATE_MISSING_RELEASES.md +0 -321
  32. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
  33. package/docs/FAQ_VERSION_NUMBERS.md +0 -152
  34. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
  35. package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
  36. package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
  37. package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
  38. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
  39. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
  40. package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
  41. package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
  42. package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
  43. package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
  44. package/docs/PHASE1_GUIDE.md +0 -349
  45. package/docs/PHASE2_GUIDE.md +0 -543
  46. package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
  47. package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
  48. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
  49. package/docs/SIMULATOR_TESTING.md +0 -408
  50. package/docs/VERSION_MANAGEMENT.md +0 -213
  51. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
  52. package/docs/archive/FEATURE_PROPOSALS.md +0 -337
  53. package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
  54. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
  55. package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
  56. package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
  57. package/docs/archive/RELEASE_SUMMARY.md +0 -173
  58. package/docs/archive/SCONS_BUILD_FIX.md +0 -313
  59. package/docs/archive/TRIGGER_RELEASE.md +0 -280
  60. package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
  61. package/docs/archive/ota-and-status-enhancements.md +0 -911
  62. package/docs/archive/ota-status-architecture-diagrams.md +0 -658
  63. package/docs/archive/ota-status-quick-reference.md +0 -284
  64. package/docs/design/.gitkeep +0 -1
  65. package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
  66. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
  67. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
  68. package/docs/development/DOCKER_TESTING.md +0 -196
  69. package/docs/development/PLATFORMIO_USAGE.md +0 -180
  70. package/docs/development/TESTING_SUMMARY.md +0 -126
  71. package/docs/development/contributing.md +0 -301
  72. package/docs/development/documentation.md +0 -583
  73. package/docs/features/DIAGNOSTICS_API.md +0 -534
  74. package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
  75. package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
  76. package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
  77. package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
  78. package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
  79. package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
  80. package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
  81. package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
  82. package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
  83. package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
  84. package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
  85. package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
  86. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
  87. package/docs/improvements/README.md +0 -212
  88. package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
  89. package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
  90. package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
  91. package/docs/internal/ISSUE_66_STATUS.md +0 -316
  92. package/docs/internal/PR_SUMMARY.md +0 -315
  93. package/docs/internal/REVIEW_SUMMARY.md +0 -332
  94. package/docs/multi-bridge-setup.md +0 -1025
  95. package/docs/platformio-publishing.md +0 -255
  96. package/docs/platformio-setup-summary.md +0 -121
  97. package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
  98. package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
  99. package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
  100. package/docs/releases/FEATURE_HISTORY.md +0 -543
  101. package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
  102. package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
  103. package/docs/releases/PATCH_v1.7.2.md +0 -262
  104. package/docs/releases/PATCH_v1.7.3.md +0 -262
  105. package/docs/releases/PATCH_v1.7.4.md +0 -219
  106. package/docs/releases/PHASE1_SUMMARY.md +0 -246
  107. package/docs/releases/PHASE2_SUMMARY.md +0 -499
  108. package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
  109. package/docs/releases/QUICK_START_RELEASES.md +0 -113
  110. package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
  111. package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
  112. package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
  113. package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
  114. package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
  115. package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
  116. package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
  117. package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
  118. package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
  119. package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
  120. package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
  121. package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
  122. package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
  123. package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
  124. package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
  125. package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
  126. package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
  127. package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
  128. package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
  129. package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
  130. package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
  131. package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
  132. package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
  133. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
  134. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
  135. package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
  136. package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
  137. package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
  138. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
  139. package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
  140. package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
  141. package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
  142. package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
  143. package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
  144. package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
  145. package/docs/troubleshooting/common-architecture-mistakes.md +0 -438
  146. package/docs/troubleshooting/internet-access-faq.md +0 -299
  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 -108
  197. package/examples/multi_bridge/regular_node.ino +0 -141
  198. package/examples/multi_bridge/secondary_bridge.ino +0 -123
  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