@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
- # 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