@alteriom/painlessmesh 1.7.2 → 1.7.3
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.
- package/CHANGELOG.md +58 -4
- package/README.md +17 -3
- package/docs/README.md +62 -10
- package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +166 -0
- package/docs/archive/LIBRARY_JSON_FIX.md +98 -0
- package/docs/archive/LIBRARY_STRUCTURE_FIX.md +215 -0
- package/docs/archive/RELEASE_SUMMARY.md +173 -0
- package/docs/archive/SCONS_BUILD_FIX.md +313 -0
- package/docs/archive/TRIGGER_RELEASE.md +280 -0
- package/docs/archive/VECTOR_INCLUDE_FIX.md +129 -0
- package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +71 -0
- package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +1011 -0
- package/docs/development/DOCKER_TESTING.md +196 -0
- package/docs/development/PLATFORMIO_USAGE.md +180 -0
- package/docs/development/TESTING_SUMMARY.md +126 -0
- package/docs/development/contributing.md +301 -0
- package/docs/development/documentation.md +583 -0
- package/docs/improvements/FUTURE_PROPOSALS.md +1016 -0
- package/docs/improvements/IMPLEMENTATION_HISTORY.md +1091 -0
- package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +709 -0
- package/docs/improvements/README.md +171 -46
- package/docs/releases/FEATURE_HISTORY.md +543 -0
- package/docs/releases/PATCH_v1.7.3.md +262 -0
- package/docs/releases/PHASE1_SUMMARY.md +246 -0
- package/docs/releases/PHASE2_SUMMARY.md +499 -0
- package/docs/releases/RELEASE_NOTES_1.7.0.md +539 -0
- package/docs/troubleshooting/debugging.md +455 -0
- package/library.json +1 -1
- package/library.properties +1 -1
- package/package.json +1 -1
- package/src/painlessmesh/router.hpp +35 -19
- /package/docs/{improvements → archive}/FEATURE_PROPOSALS.md +0 -0
- /package/docs/{improvements → archive}/PHASE1_IMPLEMENTATION.md +0 -0
- /package/docs/{improvements → archive}/PHASE2_IMPLEMENTATION.md +0 -0
- /package/docs/{improvements → archive}/ota-and-status-enhancements.md +0 -0
- /package/docs/{improvements → archive}/ota-status-architecture-diagrams.md +0 -0
- /package/docs/{improvements → archive}/ota-status-quick-reference.md +0 -0
|
@@ -0,0 +1,709 @@
|
|
|
1
|
+
# OTA and Status Enhancements Reference
|
|
2
|
+
|
|
3
|
+
**Document Type:** Feature Reference & Decision Guide
|
|
4
|
+
**Status:** Phases 1-2 Complete ✅ | Phase 3 Proposed 📋
|
|
5
|
+
**Last Updated:** October 2025
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
This document provides a comprehensive reference for OTA distribution and status monitoring enhancements in painlessMesh. Use this guide to understand available options, make implementation decisions, and plan deployments.
|
|
12
|
+
|
|
13
|
+
**Quick Links:**
|
|
14
|
+
- [Implementation History](IMPLEMENTATION_HISTORY.md) - Technical details of completed Phases 1-2
|
|
15
|
+
- [Future Proposals](FUTURE_PROPOSALS.md) - Phase 3+ roadmap
|
|
16
|
+
- [Feature History (User Docs)](../releases/FEATURE_HISTORY.md) - Migration guides and usage
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Table of Contents
|
|
21
|
+
|
|
22
|
+
- [OTA Distribution Options](#ota-distribution-options)
|
|
23
|
+
- [Status Monitoring Options](#status-monitoring-options)
|
|
24
|
+
- [Implementation Status](#implementation-status)
|
|
25
|
+
- [Decision Guide](#decision-guide)
|
|
26
|
+
- [Performance Expectations](#performance-expectations)
|
|
27
|
+
- [Architecture Diagrams](#architecture-diagrams)
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## OTA Distribution Options
|
|
32
|
+
|
|
33
|
+
### Summary Matrix
|
|
34
|
+
|
|
35
|
+
| Option | Status | Speed | Memory | Complexity | Best For |
|
|
36
|
+
|--------|--------|-------|--------|------------|----------|
|
|
37
|
+
| **1E: Compression** | ✅ v1.6.x | ⭐⭐⭐⭐ | +4-8KB | Low | Everyone (40-60% faster) |
|
|
38
|
+
| **1A: Broadcast** | ✅ v1.7.0 | ⭐⭐⭐⭐⭐ | +2-5KB | Medium | Medium-large meshes |
|
|
39
|
+
| **1B: Progressive** | 📋 Phase 3 | ⭐⭐ | +3-7KB | High | Production safety |
|
|
40
|
+
| **1C: Peer-to-Peer** | 📋 Phase 3 | ⭐⭐⭐⭐⭐ | +200KB | Very High | Very large meshes (50+) |
|
|
41
|
+
| **1D: MQTT Bridge** | 📋 Phase 3 | ⭐⭐⭐ | +5-10KB | Medium | MQTT infrastructure |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
### Option 1E: Compressed OTA Transfer ✅ IMPLEMENTED
|
|
46
|
+
|
|
47
|
+
**Status:** ✅ Available in v1.6.x+ (Phase 1)
|
|
48
|
+
|
|
49
|
+
**Description:** Infrastructure support for compressed firmware transfers. Flag propagates through OTA message chain to prepare for future compression library integration.
|
|
50
|
+
|
|
51
|
+
**Key Features:**
|
|
52
|
+
- Compressed flag in Announce/DataRequest/Data messages
|
|
53
|
+
- Backward compatible (defaults to uncompressed)
|
|
54
|
+
- State persistence across reboots
|
|
55
|
+
- Ready for compression library (heatshrink/miniz)
|
|
56
|
+
|
|
57
|
+
**Usage:**
|
|
58
|
+
```cpp
|
|
59
|
+
// Enable compression flag
|
|
60
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts, false, false, true);
|
|
61
|
+
// ^^^^^ ^^^^^ ^^^^
|
|
62
|
+
// forced bcast compress
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Performance Impact:**
|
|
66
|
+
- Speed: 40-60% faster updates (when compression library integrated)
|
|
67
|
+
- Bandwidth: 50% reduction
|
|
68
|
+
- Memory: +4-8KB for compression buffers
|
|
69
|
+
|
|
70
|
+
**Implementation Details:** [IMPLEMENTATION_HISTORY.md#compressed-ota-transfer](IMPLEMENTATION_HISTORY.md#compressed-ota-transfer)
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
### Option 1A: Broadcast OTA ✅ IMPLEMENTED
|
|
75
|
+
|
|
76
|
+
**Status:** ✅ Available in v1.7.0 (Phase 2)
|
|
77
|
+
|
|
78
|
+
**Description:** True mesh-wide firmware distribution where chunks are broadcast to all nodes simultaneously, eliminating sequential node-by-node updates.
|
|
79
|
+
|
|
80
|
+
**Key Features:**
|
|
81
|
+
- Automatic broadcast routing when `broadcasted=true`
|
|
82
|
+
- All nodes receive chunks in parallel
|
|
83
|
+
- Fallback to unicast for missed chunks
|
|
84
|
+
- 98% traffic reduction for large meshes
|
|
85
|
+
|
|
86
|
+
**Usage:**
|
|
87
|
+
```cpp
|
|
88
|
+
// Enable broadcast OTA
|
|
89
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts, false, true, false);
|
|
90
|
+
// ^^^^^ ^^^^
|
|
91
|
+
// forced broadcast
|
|
92
|
+
|
|
93
|
+
// Combine with compression
|
|
94
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts, false, true, true);
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**Architecture:**
|
|
98
|
+
```
|
|
99
|
+
Unicast Mode (Phase 1):
|
|
100
|
+
Root → Node1: chunk 0 → Node2: chunk 0 → Node3: chunk 0
|
|
101
|
+
[N × F transmissions where N=nodes, F=chunks]
|
|
102
|
+
|
|
103
|
+
Broadcast Mode (Phase 2):
|
|
104
|
+
Root → All Nodes: chunk 0 (received by all simultaneously)
|
|
105
|
+
[F transmissions only - 98% reduction for 50 nodes]
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**Performance Impact:**
|
|
109
|
+
- 50 nodes, 150 chunks: 7,500 → 150 transmissions (98% reduction)
|
|
110
|
+
- Update time: O(N×F) → O(F) (parallel vs sequential)
|
|
111
|
+
- Scales to 50-100 nodes efficiently
|
|
112
|
+
|
|
113
|
+
**Implementation Details:** [IMPLEMENTATION_HISTORY.md#broadcast-ota](IMPLEMENTATION_HISTORY.md#broadcast-ota)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### Option 1B: Progressive Rollout OTA 📋 PROPOSED
|
|
118
|
+
|
|
119
|
+
**Status:** 📋 Proposed for Phase 3
|
|
120
|
+
|
|
121
|
+
**Description:** Deploy firmware in controlled waves (canary → early adopters → all) with health monitoring and automatic rollback on failures.
|
|
122
|
+
|
|
123
|
+
**Key Features:**
|
|
124
|
+
- Phased rollout (5% → 20% → 100%)
|
|
125
|
+
- Health checks between phases
|
|
126
|
+
- Automatic rollback on failures
|
|
127
|
+
- Zero-downtime updates
|
|
128
|
+
|
|
129
|
+
**Target Use Cases:**
|
|
130
|
+
- Production deployments requiring safety
|
|
131
|
+
- Critical infrastructure
|
|
132
|
+
- Risk-averse organizations
|
|
133
|
+
|
|
134
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-1b-progressive-rollout](FUTURE_PROPOSALS.md#option-1b-progressive-rollout)
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### Option 1C: Peer-to-Peer Distribution 📋 PROPOSED
|
|
139
|
+
|
|
140
|
+
**Status:** 📋 Proposed for Phase 3
|
|
141
|
+
|
|
142
|
+
**Description:** Viral propagation where updated nodes become distribution sources, enabling exponential scaling for very large meshes.
|
|
143
|
+
|
|
144
|
+
**Key Features:**
|
|
145
|
+
- Updated nodes redistribute firmware
|
|
146
|
+
- Exponential distribution speed
|
|
147
|
+
- Requires sufficient flash storage (+200-500KB)
|
|
148
|
+
- Best for meshes with 50+ nodes
|
|
149
|
+
|
|
150
|
+
**Target Use Cases:**
|
|
151
|
+
- Very large deployments (100+ nodes)
|
|
152
|
+
- ESP32 with sufficient flash
|
|
153
|
+
- Scenarios where update speed is critical
|
|
154
|
+
|
|
155
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-1c-peer-to-peer](FUTURE_PROPOSALS.md#option-1c-peer-to-peer)
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
### Option 1D: MQTT-Integrated OTA 📋 PROPOSED
|
|
160
|
+
|
|
161
|
+
**Status:** 📋 Proposed for Phase 3
|
|
162
|
+
|
|
163
|
+
**Description:** Standardized MQTT interface for triggering and managing OTA operations, enabling cloud-based firmware management.
|
|
164
|
+
|
|
165
|
+
**Key Features:**
|
|
166
|
+
- MQTT command interface
|
|
167
|
+
- Cloud-managed updates
|
|
168
|
+
- Integration with existing MQTT infrastructure
|
|
169
|
+
- Remote OTA triggering
|
|
170
|
+
|
|
171
|
+
**Target Use Cases:**
|
|
172
|
+
- Existing MQTT infrastructure
|
|
173
|
+
- Cloud-based management
|
|
174
|
+
- External OTA tools integration
|
|
175
|
+
|
|
176
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-1d-mqtt-integrated](FUTURE_PROPOSALS.md#option-1d-mqtt-integrated)
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Status Monitoring Options
|
|
181
|
+
|
|
182
|
+
### Summary Matrix
|
|
183
|
+
|
|
184
|
+
| Option | Status | Real-time | Overhead | Complexity | Best For |
|
|
185
|
+
|--------|--------|-----------|----------|------------|----------|
|
|
186
|
+
| **2A: Enhanced Package** | ✅ v1.6.x | ⭐⭐⭐ | Low | Low | Simple integration |
|
|
187
|
+
| **2E: MQTT Bridge** | ✅ v1.7.0 | ⭐⭐⭐ | Low | Low | Cloud integration |
|
|
188
|
+
| **2B: Status Service** | 📋 Phase 3 | ⭐⭐⭐ | Medium | Medium | Centralized control |
|
|
189
|
+
| **2C: Telemetry Stream** | 📋 Phase 3 | ⭐⭐⭐⭐⭐ | Very Low | High | Real-time monitoring |
|
|
190
|
+
| **2D: Health Dashboard** | 📋 Phase 3 | ⭐⭐⭐⭐⭐ | Medium | Very High | User-facing apps |
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
### Option 2A: Enhanced StatusPackage ✅ IMPLEMENTED
|
|
195
|
+
|
|
196
|
+
**Status:** ✅ Available in v1.6.x+ (Phase 1)
|
|
197
|
+
|
|
198
|
+
**Description:** Extended Alteriom StatusPackage with 18 comprehensive fields covering device health, mesh statistics, and performance metrics.
|
|
199
|
+
|
|
200
|
+
**Key Features:**
|
|
201
|
+
- Device health (uptime, memory, WiFi, firmware)
|
|
202
|
+
- Mesh statistics (nodes, connections, messages)
|
|
203
|
+
- Performance metrics (latency, packet loss, throughput)
|
|
204
|
+
- Alert system with bit flags
|
|
205
|
+
- ~500 bytes per status report
|
|
206
|
+
|
|
207
|
+
**Usage:**
|
|
208
|
+
```cpp
|
|
209
|
+
#include "examples/alteriom/alteriom_sensor_package.hpp"
|
|
210
|
+
|
|
211
|
+
alteriom::EnhancedStatusPackage status;
|
|
212
|
+
status.uptime = millis() / 1000;
|
|
213
|
+
status.freeMemory = ESP.getFreeHeap() / 1024;
|
|
214
|
+
status.nodeCount = mesh.getNodeList().size();
|
|
215
|
+
status.alertFlags = checkSystemAlerts();
|
|
216
|
+
|
|
217
|
+
mesh.sendBroadcast(status.toJsonString());
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**18 Fields:**
|
|
221
|
+
```cpp
|
|
222
|
+
// Device Health (6 fields)
|
|
223
|
+
uint8_t deviceStatus, wifiStrength;
|
|
224
|
+
uint32_t uptime;
|
|
225
|
+
uint16_t freeMemory;
|
|
226
|
+
TSTRING firmwareVersion, firmwareMD5;
|
|
227
|
+
|
|
228
|
+
// Mesh Statistics (5 fields)
|
|
229
|
+
uint16_t nodeCount;
|
|
230
|
+
uint8_t connectionCount;
|
|
231
|
+
uint32_t messagesReceived, messagesSent, messagesDropped;
|
|
232
|
+
|
|
233
|
+
// Performance Metrics (3 fields)
|
|
234
|
+
uint16_t avgLatency;
|
|
235
|
+
uint8_t packetLossRate;
|
|
236
|
+
uint16_t throughput;
|
|
237
|
+
|
|
238
|
+
// Alerts (2 fields)
|
|
239
|
+
uint8_t alertFlags;
|
|
240
|
+
TSTRING lastError;
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Alert Flags:**
|
|
244
|
+
```cpp
|
|
245
|
+
#define ALERT_LOW_MEMORY (1 << 0) // Free heap < 10KB
|
|
246
|
+
#define ALERT_HIGH_LATENCY (1 << 1) // Avg latency > 500ms
|
|
247
|
+
#define ALERT_PACKET_LOSS (1 << 2) // Loss rate > 10%
|
|
248
|
+
#define ALERT_CONNECTION_LOST (1 << 3) // Lost connection to root
|
|
249
|
+
#define ALERT_OTA_FAILED (1 << 4) // OTA update failed
|
|
250
|
+
#define ALERT_SENSOR_ERROR (1 << 5) // Sensor malfunction
|
|
251
|
+
#define ALERT_WIFI_WEAK (1 << 6) // WiFi RSSI < -80dBm
|
|
252
|
+
#define ALERT_REBOOT_LOOP (1 << 7) // Multiple reboots detected
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Implementation Details:** [IMPLEMENTATION_HISTORY.md#enhanced-statuspackage](IMPLEMENTATION_HISTORY.md#enhanced-statuspackage)
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
### Option 2E: MQTT Status Bridge ✅ IMPLEMENTED
|
|
260
|
+
|
|
261
|
+
**Status:** ✅ Available in v1.7.0 (Phase 2)
|
|
262
|
+
|
|
263
|
+
**Description:** Publish mesh status to MQTT topics at configurable intervals, enabling integration with professional monitoring tools like Grafana and InfluxDB.
|
|
264
|
+
|
|
265
|
+
**Key Features:**
|
|
266
|
+
- Periodic publishing (default 30s)
|
|
267
|
+
- Multiple topics (nodes, topology, metrics, alerts)
|
|
268
|
+
- Configurable features (enable/disable topics)
|
|
269
|
+
- ~5-8KB memory overhead
|
|
270
|
+
|
|
271
|
+
**Usage:**
|
|
272
|
+
```cpp
|
|
273
|
+
#include "examples/bridge/mqtt_status_bridge.hpp"
|
|
274
|
+
|
|
275
|
+
MqttStatusBridge bridge(mesh, mqttClient);
|
|
276
|
+
bridge.setPublishInterval(30000); // 30 seconds
|
|
277
|
+
bridge.setTopicPrefix("alteriom/mesh/");
|
|
278
|
+
bridge.enablePerNode(false); // Disable high-traffic per-node
|
|
279
|
+
bridge.begin();
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
**MQTT Topics:**
|
|
283
|
+
```
|
|
284
|
+
mesh/status/nodes - Node list and count (~200 bytes)
|
|
285
|
+
mesh/status/topology - Mesh structure (1-5KB)
|
|
286
|
+
mesh/status/metrics - Performance stats (~300 bytes)
|
|
287
|
+
mesh/status/alerts - Active alerts (~400 bytes)
|
|
288
|
+
mesh/status/node/{id} - Per-node status (optional, high traffic)
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Integration Examples:**
|
|
292
|
+
|
|
293
|
+
**Grafana:**
|
|
294
|
+
```
|
|
295
|
+
1. Install MQTT datasource plugin
|
|
296
|
+
2. Configure broker connection
|
|
297
|
+
3. Create panels for:
|
|
298
|
+
- Node count over time
|
|
299
|
+
- Memory usage trends
|
|
300
|
+
- Alert timeline
|
|
301
|
+
- Topology visualization
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**InfluxDB:**
|
|
305
|
+
```
|
|
306
|
+
1. Install Telegraf with MQTT consumer
|
|
307
|
+
2. Configure topic subscriptions
|
|
308
|
+
3. Parse JSON payloads
|
|
309
|
+
4. Store time-series data
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Home Assistant:**
|
|
313
|
+
```yaml
|
|
314
|
+
mqtt:
|
|
315
|
+
sensor:
|
|
316
|
+
- name: "Mesh Node Count"
|
|
317
|
+
state_topic: "mesh/status/metrics"
|
|
318
|
+
value_template: "{{ value_json.nodeCount }}"
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
**Scalability Recommendations:**
|
|
322
|
+
|
|
323
|
+
| Mesh Size | Features | Interval | Traffic/Hour |
|
|
324
|
+
|-----------|----------|----------|-------------|
|
|
325
|
+
| 1-10 nodes | All enabled | 30s | ~400KB |
|
|
326
|
+
| 10-50 nodes | Disable per-node | 60s | ~200KB |
|
|
327
|
+
| 50+ nodes | Metrics + alerts only | 120s | ~100KB |
|
|
328
|
+
|
|
329
|
+
**Implementation Details:** [IMPLEMENTATION_HISTORY.md#mqtt-status-bridge](IMPLEMENTATION_HISTORY.md#mqtt-status-bridge)
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
### Option 2B: Mesh Status Service 📋 PROPOSED
|
|
334
|
+
|
|
335
|
+
**Status:** 📋 Proposed for Phase 3
|
|
336
|
+
|
|
337
|
+
**Description:** Query-based status collection with centralized aggregation, providing on-demand mesh-wide status via RESTful API.
|
|
338
|
+
|
|
339
|
+
**Target Use Cases:**
|
|
340
|
+
- Centralized monitoring
|
|
341
|
+
- On-demand queries
|
|
342
|
+
- Dashboard applications
|
|
343
|
+
|
|
344
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-2b-status-service](FUTURE_PROPOSALS.md#option-2b-status-service)
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
### Option 2C: Telemetry Stream 📋 PROPOSED
|
|
349
|
+
|
|
350
|
+
**Status:** 📋 Proposed for Phase 3
|
|
351
|
+
|
|
352
|
+
**Description:** Continuous low-bandwidth telemetry with delta encoding, anomaly detection, and proactive alerting for real-time critical monitoring.
|
|
353
|
+
|
|
354
|
+
**Target Use Cases:**
|
|
355
|
+
- Real-time monitoring requirements
|
|
356
|
+
- Large-scale deployments (50+ nodes)
|
|
357
|
+
- Proactive alerting systems
|
|
358
|
+
|
|
359
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-2c-telemetry-stream](FUTURE_PROPOSALS.md#option-2c-telemetry-stream)
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
### Option 2D: Health Dashboard 📋 PROPOSED
|
|
364
|
+
|
|
365
|
+
**Status:** 📋 Proposed for Phase 3
|
|
366
|
+
|
|
367
|
+
**Description:** Complete web-based monitoring solution with embedded web server, real-time visualization, and interactive topology display.
|
|
368
|
+
|
|
369
|
+
**Target Use Cases:**
|
|
370
|
+
- User-facing applications
|
|
371
|
+
- Visual monitoring requirements
|
|
372
|
+
- Local network management
|
|
373
|
+
|
|
374
|
+
**Proposal Details:** [FUTURE_PROPOSALS.md#option-2d-health-dashboard](FUTURE_PROPOSALS.md#option-2d-health-dashboard)
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## Implementation Status
|
|
379
|
+
|
|
380
|
+
### ✅ Phase 1 (v1.6.x) - COMPLETE
|
|
381
|
+
|
|
382
|
+
**Features:**
|
|
383
|
+
- ✅ Compressed OTA infrastructure (Option 1E)
|
|
384
|
+
- ✅ Enhanced StatusPackage (Option 2A)
|
|
385
|
+
|
|
386
|
+
**Achievements:**
|
|
387
|
+
- 40-60% OTA speed improvement (when compression library integrated)
|
|
388
|
+
- Standardized status reporting with 18 fields
|
|
389
|
+
- 80 test assertions passing
|
|
390
|
+
- Full backward compatibility
|
|
391
|
+
|
|
392
|
+
**Release:** v1.6.0 (December 2024)
|
|
393
|
+
|
|
394
|
+
---
|
|
395
|
+
|
|
396
|
+
### ✅ Phase 2 (v1.7.0) - COMPLETE
|
|
397
|
+
|
|
398
|
+
**Features:**
|
|
399
|
+
- ✅ Broadcast OTA (Option 1A)
|
|
400
|
+
- ✅ MQTT Status Bridge (Option 2E)
|
|
401
|
+
|
|
402
|
+
**Achievements:**
|
|
403
|
+
- 98% traffic reduction for large meshes (50 nodes)
|
|
404
|
+
- Cloud integration via MQTT
|
|
405
|
+
- Grafana/InfluxDB compatibility
|
|
406
|
+
- Scales to 50-100 nodes
|
|
407
|
+
|
|
408
|
+
**Release:** v1.7.0 (March 2025)
|
|
409
|
+
|
|
410
|
+
---
|
|
411
|
+
|
|
412
|
+
### 📋 Phase 3 (Future) - PROPOSED
|
|
413
|
+
|
|
414
|
+
**Proposed Features:**
|
|
415
|
+
- 📋 Progressive Rollout OTA (Option 1B)
|
|
416
|
+
- 📋 Peer-to-Peer Distribution (Option 1C)
|
|
417
|
+
- 📋 MQTT-Integrated OTA (Option 1D)
|
|
418
|
+
- 📋 Mesh Status Service (Option 2B)
|
|
419
|
+
- 📋 Telemetry Stream (Option 2C)
|
|
420
|
+
- 📋 Health Dashboard (Option 2D)
|
|
421
|
+
|
|
422
|
+
**Timeline:** TBD based on community feedback
|
|
423
|
+
|
|
424
|
+
---
|
|
425
|
+
|
|
426
|
+
## Decision Guide
|
|
427
|
+
|
|
428
|
+
### "Which OTA option should I use?"
|
|
429
|
+
|
|
430
|
+
**Start with:** 1E (Compression) + 1A (Broadcast)
|
|
431
|
+
- Both available in v1.7.0
|
|
432
|
+
- Universal benefits (faster, less bandwidth)
|
|
433
|
+
- Works with existing infrastructure
|
|
434
|
+
|
|
435
|
+
**Decision Tree:**
|
|
436
|
+
|
|
437
|
+
```
|
|
438
|
+
Do you have 1-10 nodes?
|
|
439
|
+
├─ Yes: Use Compression (1E) only
|
|
440
|
+
└─ No: Use Compression (1E) + Broadcast (1A)
|
|
441
|
+
|
|
442
|
+
Do you need production-safe deployments?
|
|
443
|
+
├─ Yes: Wait for Progressive Rollout (1B) - Phase 3
|
|
444
|
+
└─ No: Use Broadcast (1A) - Available now
|
|
445
|
+
|
|
446
|
+
Do you have 50+ nodes with ESP32?
|
|
447
|
+
├─ Yes: Consider Peer-to-Peer (1C) - Phase 3
|
|
448
|
+
└─ No: Broadcast (1A) is sufficient
|
|
449
|
+
|
|
450
|
+
Do you use MQTT infrastructure?
|
|
451
|
+
├─ Yes: Consider MQTT OTA (1D) - Phase 3
|
|
452
|
+
└─ No: Use native broadcast (1A)
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
### "Which status option should I use?"
|
|
458
|
+
|
|
459
|
+
**Start with:** 2A (Enhanced StatusPackage) + 2E (MQTT Bridge)
|
|
460
|
+
- Both available in v1.7.0
|
|
461
|
+
- Easy integration
|
|
462
|
+
- Professional monitoring
|
|
463
|
+
|
|
464
|
+
**Decision Tree:**
|
|
465
|
+
|
|
466
|
+
```
|
|
467
|
+
Do you need cloud monitoring?
|
|
468
|
+
├─ Yes: Use MQTT Bridge (2E) - Available now
|
|
469
|
+
└─ No: Use Enhanced StatusPackage (2A) - Available now
|
|
470
|
+
|
|
471
|
+
Do you use Grafana/InfluxDB?
|
|
472
|
+
├─ Yes: Use MQTT Bridge (2E) with Telegraf
|
|
473
|
+
└─ No: Use Enhanced StatusPackage (2A)
|
|
474
|
+
|
|
475
|
+
Do you need real-time monitoring (<1s latency)?
|
|
476
|
+
├─ Yes: Wait for Telemetry Stream (2C) - Phase 3
|
|
477
|
+
└─ No: MQTT Bridge (2E) is sufficient (30s interval)
|
|
478
|
+
|
|
479
|
+
Do you need web-based UI?
|
|
480
|
+
├─ Yes: Wait for Health Dashboard (2D) - Phase 3
|
|
481
|
+
└─ No: Use Grafana with MQTT Bridge (2E)
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
---
|
|
485
|
+
|
|
486
|
+
## Performance Expectations
|
|
487
|
+
|
|
488
|
+
### OTA Performance by Phase
|
|
489
|
+
|
|
490
|
+
| Phase | Features | 10 Nodes | 50 Nodes | Bandwidth |
|
|
491
|
+
|-------|----------|----------|----------|-----------|
|
|
492
|
+
| **Base** | Unicast only | 60-120s | 300-600s | N × Size |
|
|
493
|
+
| **Phase 1** | + Compression | 35-70s | 180-360s | 0.5 × N × Size |
|
|
494
|
+
| **Phase 2** | + Broadcast | 20-30s | 30-50s | 0.5 × Size |
|
|
495
|
+
| **Phase 3** | + Progressive | 40-60s | 60-100s | 0.5 × Size |
|
|
496
|
+
|
|
497
|
+
**Key Insights:**
|
|
498
|
+
- Phase 1 (Compression): 40% faster, universal benefit
|
|
499
|
+
- Phase 2 (Broadcast): 75% faster for large meshes, scales to 100 nodes
|
|
500
|
+
- Phase 3 (Progressive): Slower but safer, zero-downtime
|
|
501
|
+
|
|
502
|
+
---
|
|
503
|
+
|
|
504
|
+
### Status Monitoring Performance
|
|
505
|
+
|
|
506
|
+
| Option | Traffic/Node | Overhead | Latency | Scalability |
|
|
507
|
+
|--------|-------------|----------|---------|-------------|
|
|
508
|
+
| **Enhanced Package** | ~500 bytes | Low | 30-60s | 1-50 nodes |
|
|
509
|
+
| **MQTT Bridge** | ~1KB | Low | 30-60s | 1-100 nodes |
|
|
510
|
+
| **Status Service** | ~1.5KB | Medium | 5-15s | 1-100 nodes |
|
|
511
|
+
| **Telemetry Stream** | ~200 bytes | Very Low | <1s | 1-200+ nodes |
|
|
512
|
+
| **Health Dashboard** | ~2KB | Medium | 1-5s | 1-50 nodes |
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
### Memory Impact Summary
|
|
517
|
+
|
|
518
|
+
| Feature | ESP8266 | ESP32 | Notes |
|
|
519
|
+
|---------|---------|-------|-------|
|
|
520
|
+
| **Compressed OTA** | +4-8KB | +4-8KB | Compression buffers |
|
|
521
|
+
| **Broadcast OTA** | +2-5KB | +2-5KB | Chunk assembly |
|
|
522
|
+
| **Enhanced Status** | +500B | +500B | Per status report |
|
|
523
|
+
| **MQTT Bridge** | +5-8KB | +5-8KB | Root node only |
|
|
524
|
+
| **Combined Phase 2** | +7-13KB | +7-13KB | All features |
|
|
525
|
+
|
|
526
|
+
**ESP8266 Constraints:**
|
|
527
|
+
- Total RAM: ~80KB
|
|
528
|
+
- After mesh core: ~30-40KB free
|
|
529
|
+
- Phase 2 features: ~7-13KB
|
|
530
|
+
- Remaining: ~20-30KB for application
|
|
531
|
+
|
|
532
|
+
**ESP32 Constraints:**
|
|
533
|
+
- Total RAM: ~320KB
|
|
534
|
+
- After mesh core: ~200-250KB free
|
|
535
|
+
- Phase 2 features: ~7-13KB
|
|
536
|
+
- Remaining: ~180-240KB for application
|
|
537
|
+
|
|
538
|
+
---
|
|
539
|
+
|
|
540
|
+
## Architecture Diagrams
|
|
541
|
+
|
|
542
|
+
### Broadcast OTA Flow
|
|
543
|
+
|
|
544
|
+
```
|
|
545
|
+
┌─────────────┐
|
|
546
|
+
│ Root Node │
|
|
547
|
+
│ (Sender) │
|
|
548
|
+
└──────┬──────┘
|
|
549
|
+
│
|
|
550
|
+
│ 1. Broadcast Announce (periodic, every 60s)
|
|
551
|
+
├──────────────────────────────────────►
|
|
552
|
+
│ │
|
|
553
|
+
│ ▼
|
|
554
|
+
│ ┌──────────────┐
|
|
555
|
+
│ │ All Nodes │
|
|
556
|
+
│ │ Check MD5 │
|
|
557
|
+
│ └──────┬───────┘
|
|
558
|
+
│ │
|
|
559
|
+
│ 2. Root requests chunk 0 (triggers broadcast)
|
|
560
|
+
│◄─────────────────────────────────────┤
|
|
561
|
+
│ │
|
|
562
|
+
│ 3. Broadcast Data (chunk 0) │
|
|
563
|
+
├─────────────────────────────────────►
|
|
564
|
+
│ │
|
|
565
|
+
│ All nodes receive simultaneously │
|
|
566
|
+
│ │
|
|
567
|
+
│ 4. Broadcast Data (chunk 1) │
|
|
568
|
+
├─────────────────────────────────────►
|
|
569
|
+
│ │
|
|
570
|
+
│ ... continue for all chunks ... │
|
|
571
|
+
│ │
|
|
572
|
+
│ 5. Broadcast Data (chunk N) │
|
|
573
|
+
├─────────────────────────────────────►
|
|
574
|
+
│ │
|
|
575
|
+
│ ▼
|
|
576
|
+
│ ┌──────────────┐
|
|
577
|
+
│ │ All Nodes │
|
|
578
|
+
│ │ Reboot │
|
|
579
|
+
│ └──────────────┘
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
**Key Benefits:**
|
|
583
|
+
- F transmissions instead of N×F (where N=nodes, F=chunks)
|
|
584
|
+
- All nodes update in parallel
|
|
585
|
+
- 98% traffic reduction for 50-node mesh
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
### MQTT Status Bridge Flow
|
|
590
|
+
|
|
591
|
+
```
|
|
592
|
+
┌──────────────┐
|
|
593
|
+
│ painlessMesh │
|
|
594
|
+
│ - Nodes │
|
|
595
|
+
│ - Topology │
|
|
596
|
+
│ - Metrics │
|
|
597
|
+
└──────┬───────┘
|
|
598
|
+
│ (periodic read)
|
|
599
|
+
▼
|
|
600
|
+
┌──────────────────┐
|
|
601
|
+
│ MqttStatusBridge │
|
|
602
|
+
│ - Collect │
|
|
603
|
+
│ - Format JSON │
|
|
604
|
+
│ - Publish │
|
|
605
|
+
└──────┬───────────┘
|
|
606
|
+
│ (MQTT publish)
|
|
607
|
+
▼
|
|
608
|
+
┌──────────────────┐ ┌─────────────┐
|
|
609
|
+
│ MQTT Broker │────────►│ Grafana │
|
|
610
|
+
│ mesh/status/* │ │ Dashboards │
|
|
611
|
+
└──────────────────┘ └─────────────┘
|
|
612
|
+
│
|
|
613
|
+
│
|
|
614
|
+
▼
|
|
615
|
+
┌──────────────────┐
|
|
616
|
+
│ InfluxDB │
|
|
617
|
+
│ Time-series DB │
|
|
618
|
+
└──────────────────┘
|
|
619
|
+
```
|
|
620
|
+
|
|
621
|
+
**Topics:**
|
|
622
|
+
- `mesh/status/nodes` - Node list (~200B every 30s)
|
|
623
|
+
- `mesh/status/topology` - Mesh structure (1-5KB every 60s)
|
|
624
|
+
- `mesh/status/metrics` - Performance stats (~300B every 30s)
|
|
625
|
+
- `mesh/status/alerts` - Active alerts (~400B every 30s)
|
|
626
|
+
|
|
627
|
+
---
|
|
628
|
+
|
|
629
|
+
### Phase 1-2-3 Evolution
|
|
630
|
+
|
|
631
|
+
```
|
|
632
|
+
PHASE 1 (v1.6.x):
|
|
633
|
+
┌─────────────┐
|
|
634
|
+
│ Unicast OTA │ ──► Compressed flag added
|
|
635
|
+
└─────────────┘ (40-60% faster when library integrated)
|
|
636
|
+
┌─────────────┐
|
|
637
|
+
│ Basic Status│ ──► Enhanced StatusPackage
|
|
638
|
+
└─────────────┘ (18 comprehensive fields)
|
|
639
|
+
|
|
640
|
+
PHASE 2 (v1.7.0):
|
|
641
|
+
┌─────────────┐
|
|
642
|
+
│ Broadcast │ ──► True mesh-wide distribution
|
|
643
|
+
│ OTA │ (98% traffic reduction)
|
|
644
|
+
└─────────────┘
|
|
645
|
+
┌─────────────┐
|
|
646
|
+
│ MQTT Bridge │ ──► Cloud integration
|
|
647
|
+
│ │ (Grafana/InfluxDB)
|
|
648
|
+
└─────────────┘
|
|
649
|
+
|
|
650
|
+
PHASE 3 (Future):
|
|
651
|
+
┌─────────────┐
|
|
652
|
+
│ Progressive │ ──► Canary deployments
|
|
653
|
+
│ Rollout │ (Zero-downtime updates)
|
|
654
|
+
└─────────────┘
|
|
655
|
+
┌─────────────┐
|
|
656
|
+
│ Telemetry │ ──► Real-time monitoring
|
|
657
|
+
│ Stream │ (Sub-second latency)
|
|
658
|
+
└─────────────┘
|
|
659
|
+
┌─────────────┐
|
|
660
|
+
│ P2P OTA │ ──► Viral propagation
|
|
661
|
+
│ │ (100+ node meshes)
|
|
662
|
+
└─────────────┘
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
---
|
|
666
|
+
|
|
667
|
+
## Related Documentation
|
|
668
|
+
|
|
669
|
+
### User Documentation
|
|
670
|
+
- [Feature History](../releases/FEATURE_HISTORY.md) - User-facing docs, migration guides
|
|
671
|
+
- [Phase 1 Guide](../PHASE1_GUIDE.md) - Complete Phase 1 usage guide
|
|
672
|
+
- [Phase 2 Guide](../PHASE2_GUIDE.md) - Complete Phase 2 usage guide
|
|
673
|
+
|
|
674
|
+
### Technical Documentation
|
|
675
|
+
- [Implementation History](IMPLEMENTATION_HISTORY.md) - Technical implementation details
|
|
676
|
+
- [Future Proposals](FUTURE_PROPOSALS.md) - Phase 3+ roadmap
|
|
677
|
+
|
|
678
|
+
### Examples
|
|
679
|
+
- `examples/alteriom/phase1_features.ino` - Phase 1 demonstration
|
|
680
|
+
- `examples/alteriom/phase2_features.ino` - Phase 2 demonstration
|
|
681
|
+
- `examples/bridge/mqtt_bridge_example.ino` - MQTT integration example
|
|
682
|
+
- `examples/otaSender/otaSender.ino` - OTA sender implementation
|
|
683
|
+
- `examples/otaReceiver/otaReceiver.ino` - OTA receiver implementation
|
|
684
|
+
|
|
685
|
+
---
|
|
686
|
+
|
|
687
|
+
## Contributing
|
|
688
|
+
|
|
689
|
+
Interested in implementing Phase 3 features or improving existing ones?
|
|
690
|
+
|
|
691
|
+
1. Review [FUTURE_PROPOSALS.md](FUTURE_PROPOSALS.md) for detailed feature specifications
|
|
692
|
+
2. Check [GitHub Issues](https://github.com/Alteriom/painlessMesh/issues) for active discussions
|
|
693
|
+
3. Read [Contributing Guide](../development/contributing.md) for development workflow
|
|
694
|
+
4. Open an issue to discuss your implementation plan
|
|
695
|
+
5. Submit a pull request with implementation and tests
|
|
696
|
+
|
|
697
|
+
---
|
|
698
|
+
|
|
699
|
+
## Questions & Support
|
|
700
|
+
|
|
701
|
+
- **GitHub Issues:** <https://github.com/Alteriom/painlessMesh/issues>
|
|
702
|
+
- **Discussions:** <https://github.com/Alteriom/painlessMesh/discussions>
|
|
703
|
+
- **Documentation:** <https://alteriom.github.io/painlessMesh/>
|
|
704
|
+
|
|
705
|
+
---
|
|
706
|
+
|
|
707
|
+
**Document Version:** 1.0
|
|
708
|
+
**Last Updated:** October 2025
|
|
709
|
+
**Status:** Living document - updated as features are implemented
|