@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
- # 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)
@@ -1,127 +0,0 @@
1
- # Quick Reference: Version Management
2
-
3
- ## 🎯 Where to Find Version Information
4
-
5
- | File | Purpose | When to Update |
6
- |------|---------|----------------|
7
- | `library.properties` | **Official Arduino version** | Every release |
8
- | `library.json` | **Official PlatformIO version** | Every release |
9
- | `package.json` | **Official NPM version** | Every release |
10
- | `src/painlessMesh.h` | Header documentation | Every release (recommended) |
11
- | `src/AlteriomPainlessMesh.h` | Version defines | Every release (recommended) |
12
- | `CHANGELOG.md` | Release history | Every release |
13
-
14
- ## 🚀 Quick Release Checklist
15
-
16
- ```bash
17
- # 1. Bump version
18
- ./scripts/bump-version.sh patch # or minor, major
19
-
20
- # 2. Update CHANGELOG.md
21
- # Move [Unreleased] items to new [X.Y.Z] section
22
-
23
- # 3. Update header files
24
- # Edit src/painlessMesh.h - update @version comment
25
- # Edit src/AlteriomPainlessMesh.h - update version defines
26
-
27
- # 4. Validate
28
- ./scripts/release-agent.sh
29
-
30
- # 5. Commit and push
31
- git add library.properties library.json package.json CHANGELOG.md src/*.h
32
- git commit -m "release: vX.Y.Z - Brief description"
33
- git push origin main
34
- ```
35
-
36
- ## 📝 Version Comment Format
37
-
38
- ### In `src/painlessMesh.h`:
39
- ```cpp
40
- /**
41
- * @file painlessMesh.h
42
- * @brief Main header file for Alteriom painlessMesh library
43
- *
44
- * @version 1.8.7 // ← Library version
45
- * @date 2025-11-12 // ← Current date
46
- *
47
- * painlessMesh is a user-friendly library...
48
- */
49
- ```
50
-
51
- ### In `src/AlteriomPainlessMesh.h`:
52
- ```cpp
53
- /**
54
- * @brief AlteriomPainlessMesh library version information
55
- */
56
- #define ALTERIOM_PAINLESS_MESH_VERSION "1.8.7"
57
- #define ALTERIOM_PAINLESS_MESH_VERSION_MAJOR 1
58
- #define ALTERIOM_PAINLESS_MESH_VERSION_MINOR 8
59
- #define ALTERIOM_PAINLESS_MESH_VERSION_PATCH 7
60
- ```
61
-
62
- ## 🔍 Quick Commands
63
-
64
- ### Check current version:
65
- ```bash
66
- grep "version=" library.properties
67
- ```
68
-
69
- ### Verify all versions match:
70
- ```bash
71
- grep -E "version|VERSION" library.properties library.json package.json src/*.h
72
- ```
73
-
74
- ### See file modification history:
75
- ```bash
76
- git log --oneline -- src/painlessMesh.h
77
- ```
78
-
79
- ### See last modification date:
80
- ```bash
81
- git log -1 --format="%ai" -- src/painlessMesh.h
82
- ```
83
-
84
- ## ❓ Common Questions
85
-
86
- **Q: What version is the library?**
87
- → Check `library.properties`, line 2
88
-
89
- **Q: When was a file last modified?**
90
- → Use `git log -1 -- path/to/file`
91
-
92
- **Q: Why is header version different from library.properties?**
93
- → Header comments may not have been updated. Trust `library.properties`.
94
-
95
- **Q: Do I need to update header versions?**
96
- → Recommended but not critical. Update during releases.
97
-
98
- ## 📚 Full Documentation
99
-
100
- For complete information:
101
- - **[VERSION_MANAGEMENT.md](VERSION_MANAGEMENT.md)** - Complete guide
102
- - **[FAQ_VERSION_NUMBERS.md](FAQ_VERSION_NUMBERS.md)** - Common questions
103
- - **[RELEASE_GUIDE.md](../RELEASE_GUIDE.md)** - Release process
104
-
105
- ## 🎓 Key Principles
106
-
107
- 1. **Single Source of Truth**: `library.properties` / `library.json` / `package.json`
108
- 2. **Header Comments**: Documentation only, not source of truth
109
- 3. **Git History**: Actual record of file modifications
110
- 4. **Synchronize on Release**: Keep all versions aligned during releases
111
- 5. **When in Doubt**: Check `library.properties`
112
-
113
- ---
114
-
115
- **Quick Access:**
116
- ```bash
117
- # View this file
118
- cat docs/QUICK_REFERENCE_VERSIONING.md
119
-
120
- # View full guide
121
- cat docs/VERSION_MANAGEMENT.md
122
-
123
- # View FAQ
124
- cat docs/FAQ_VERSION_NUMBERS.md
125
- ```
126
-
127
- **Last Updated:** November 12, 2025