@alteriom/painlessmesh 1.6.1 → 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 +435 -144
- package/LICENSE +674 -674
- package/README.md +491 -434
- package/RELEASE_GUIDE.md +504 -418
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
- package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
- package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
- package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
- package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
- package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
- package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
- package/docs/PHASE1_GUIDE.md +349 -0
- package/docs/PHASE2_GUIDE.md +543 -0
- package/docs/README.md +130 -71
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
- package/docs/alteriom/overview.md +507 -507
- package/docs/api/core-api.md +606 -606
- package/docs/architecture/mesh-architecture.md +378 -378
- package/docs/architecture/plugin-system.md +516 -516
- package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +166 -0
- package/docs/archive/FEATURE_PROPOSALS.md +337 -0
- package/docs/archive/LIBRARY_JSON_FIX.md +98 -0
- package/docs/archive/LIBRARY_STRUCTURE_FIX.md +215 -0
- package/docs/archive/PHASE1_IMPLEMENTATION.md +325 -0
- package/docs/archive/PHASE2_IMPLEMENTATION.md +567 -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/archive/ota-and-status-enhancements.md +911 -0
- package/docs/archive/ota-status-architecture-diagrams.md +658 -0
- package/docs/archive/ota-status-quick-reference.md +284 -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/getting-started/first-mesh.md +409 -409
- package/docs/getting-started/installation.md +274 -274
- package/docs/getting-started/quickstart.md +157 -157
- 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 +212 -69
- package/docs/platformio-publishing.md +255 -0
- package/docs/platformio-setup-summary.md +121 -0
- 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/common-issues.md +520 -520
- package/docs/troubleshooting/debugging.md +455 -0
- package/docs/troubleshooting/faq.md +472 -472
- package/docs/tutorials/basic-examples.md +717 -717
- package/docs/wiki/API-Reference.md +245 -245
- package/docs/wiki/Complete-Documentation.md +122 -122
- package/examples/alteriom/README.md +139 -81
- package/examples/alteriom/alteriom.ino +186 -185
- package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
- package/examples/alteriom/platformio.ini +24 -24
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
- package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
- package/examples/alteriomImproved/platformio.ini +25 -0
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase1/phase1_features.ino +242 -0
- package/examples/alteriomPhase1/platformio.ini +25 -0
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase2/phase2_features.ino +186 -0
- package/examples/alteriomPhase2/platformio.ini +25 -0
- package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomSensorNode/platformio.ini +25 -0
- package/examples/basic/basic.ino +66 -66
- package/examples/basic/platformio.ini +25 -25
- package/examples/bridge/bridge.ino +51 -51
- package/examples/bridge/mesh_event_publisher.hpp +253 -0
- package/examples/bridge/mesh_topology_reporter.hpp +303 -0
- package/examples/bridge/mqtt_command_bridge.hpp +459 -0
- package/examples/bridge/mqtt_status_bridge.hpp +519 -0
- package/examples/bridge/platformio.ini +25 -25
- package/examples/echoNode/echoNode.ino +33 -33
- package/examples/echoNode/platformio.ini +25 -25
- package/examples/logClient/logClient.ino +109 -109
- package/examples/logClient/platformio.ini +25 -25
- package/examples/logServer/logServer.ino +81 -81
- package/examples/logServer/platformio.ini +25 -25
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
- package/examples/meshCommandNode/meshCommandNode.ino +263 -0
- package/examples/meshCommandNode/platformio.ini +25 -0
- package/examples/mqttBridge/mqttBridge.ino +118 -118
- package/examples/mqttBridge/platformio.ini +26 -26
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
- package/examples/mqttCommandBridge/platformio.ini +26 -0
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
- package/examples/mqttStatusBridge/platformio.ini +26 -0
- package/examples/mqttTopologyTest/README.md +467 -0
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
- package/examples/mqttTopologyTest/platformio.ini +26 -0
- package/examples/namedMesh/namedMesh.ino +97 -97
- package/examples/namedMesh/platformio.ini +25 -25
- package/examples/otaReceiver/otaReceiver.ino +79 -79
- package/examples/otaReceiver/platformio.ini +25 -25
- package/examples/otaSender/otaSender.ino +160 -151
- package/examples/otaSender/platformio.ini +25 -25
- package/examples/startHere/platformio.ini +25 -25
- package/examples/startHere/startHere.ino +159 -159
- package/examples/webServer/platformio.ini +27 -27
- package/examples/webServer/webServer.ino +89 -89
- package/keywords.txt +48 -48
- package/library.json +55 -34
- package/library.properties +10 -10
- package/package.json +86 -78
- package/src/AlteriomPainlessMesh.h +97 -97
- package/src/arduino/wifi.hpp +365 -365
- package/src/boost/asynctcp.hpp +279 -279
- package/src/painlessMesh.h +70 -70
- package/src/painlessMeshSTA.cpp +236 -236
- package/src/painlessMeshSTA.h +58 -58
- package/src/painlessTaskOptions.h +4 -4
- package/src/painlessmesh/base64.hpp +111 -111
- package/src/painlessmesh/buffer.hpp +229 -229
- package/src/painlessmesh/callback.hpp +91 -91
- package/src/painlessmesh/configuration.hpp +77 -77
- package/src/painlessmesh/connection.hpp +192 -192
- package/src/painlessmesh/layout.hpp +188 -188
- package/src/painlessmesh/logger.hpp +158 -158
- package/src/painlessmesh/memory.hpp +119 -119
- package/src/painlessmesh/mesh.hpp +761 -560
- package/src/painlessmesh/metrics.hpp +322 -322
- package/src/painlessmesh/ntp.hpp +263 -263
- package/src/painlessmesh/ota.hpp +582 -553
- package/src/painlessmesh/plugin.hpp +188 -188
- package/src/painlessmesh/protocol.hpp +813 -813
- package/src/painlessmesh/router.hpp +338 -322
- package/src/painlessmesh/tcp.hpp +71 -71
- package/src/painlessmesh/validation.hpp +238 -238
- package/src/plugin/performance.hpp +214 -214
- package/src/plugin/remote.hpp +64 -64
- package/src/scheduler.cpp +10 -10
- package/src/wifi.cpp +2 -2
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# OTA and Status Enhancements - Quick Reference
|
|
2
|
+
|
|
3
|
+
**TL;DR:** Five options each for OTA distribution improvements and mesh status monitoring, with phased implementation recommendations.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 🚀 OTA Distribution Options
|
|
8
|
+
|
|
9
|
+
### ⚡ Option 1A: Mesh-Wide Broadcast OTA ★★★★★ (RECOMMENDED - Phase 2)
|
|
10
|
+
**What:** Broadcast firmware chunks to all nodes simultaneously
|
|
11
|
+
**Speed:** Very Fast | **Memory:** +2-5KB | **Complexity:** Medium
|
|
12
|
+
**Best For:** Medium to large meshes (10-100 nodes)
|
|
13
|
+
|
|
14
|
+
### 🛡️ Option 1B: Progressive Rollout OTA ★★★★☆ (RECOMMENDED - Phase 3)
|
|
15
|
+
**What:** Deploy firmware in waves (canary → early adopters → all)
|
|
16
|
+
**Speed:** Slow | **Memory:** +3-7KB | **Complexity:** High
|
|
17
|
+
**Best For:** Production deployments requiring safety
|
|
18
|
+
|
|
19
|
+
### 🌐 Option 1C: Peer-to-Peer Distribution ★★★☆☆
|
|
20
|
+
**What:** Updated nodes become distribution sources
|
|
21
|
+
**Speed:** Very Fast | **Memory:** +200-500KB | **Complexity:** Very High
|
|
22
|
+
**Best For:** Very large meshes (50+ nodes) with sufficient flash
|
|
23
|
+
|
|
24
|
+
### 🔗 Option 1D: MQTT-Integrated OTA ★★★★☆
|
|
25
|
+
**What:** Standardized MQTT interface for OTA operations
|
|
26
|
+
**Speed:** Medium | **Memory:** +5-10KB | **Complexity:** Medium
|
|
27
|
+
**Best For:** Existing MQTT infrastructure
|
|
28
|
+
|
|
29
|
+
### 📦 Option 1E: Compressed OTA Transfer ★★★★★ (RECOMMENDED - Phase 1)
|
|
30
|
+
**What:** Gzip compression for firmware transfers
|
|
31
|
+
**Speed:** Fast | **Memory:** +4-8KB | **Complexity:** Low
|
|
32
|
+
**Best For:** All deployments (40-60% bandwidth reduction)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## 📊 Mesh Status Options
|
|
37
|
+
|
|
38
|
+
### 📡 Option 2A: Enhanced StatusPackage ★★★★★ (RECOMMENDED - Phase 1)
|
|
39
|
+
**What:** Extend Alteriom StatusPackage with comprehensive metrics
|
|
40
|
+
**Overhead:** Low | **Memory:** +500 bytes | **Complexity:** Low
|
|
41
|
+
**Best For:** Alteriom users, simple integration
|
|
42
|
+
|
|
43
|
+
### 🔍 Option 2B: Mesh Status Service ★★★★☆ (RECOMMENDED - Phase 2)
|
|
44
|
+
**What:** Query-based status collection with aggregation
|
|
45
|
+
**Overhead:** Medium | **Memory:** +2-4KB node, +10-20KB root | **Complexity:** Medium
|
|
46
|
+
**Best For:** Centralized monitoring, on-demand queries
|
|
47
|
+
|
|
48
|
+
### 📈 Option 2C: Telemetry Stream ★★★★☆ (RECOMMENDED - Phase 3)
|
|
49
|
+
**What:** Continuous low-bandwidth telemetry with delta encoding
|
|
50
|
+
**Overhead:** Low | **Memory:** +1-2KB node, +50-100KB root | **Complexity:** High
|
|
51
|
+
**Best For:** Real-time monitoring, large-scale deployments
|
|
52
|
+
|
|
53
|
+
### 🖥️ Option 2D: Health Dashboard ★★★☆☆
|
|
54
|
+
**What:** Complete web-based monitoring solution
|
|
55
|
+
**Overhead:** Medium | **Memory:** +50-100KB code, +200KB assets | **Complexity:** Very High
|
|
56
|
+
**Best For:** User-facing applications, visual monitoring
|
|
57
|
+
|
|
58
|
+
### 🔗 Option 2E: MQTT Status Bridge ★★★★★ (RECOMMENDED - Phase 2)
|
|
59
|
+
**What:** Publish mesh status to MQTT topics
|
|
60
|
+
**Overhead:** Low | **Memory:** +5-8KB | **Complexity:** Low
|
|
61
|
+
**Best For:** Cloud integration, existing monitoring tools
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 🎯 Recommended Implementation Path
|
|
66
|
+
|
|
67
|
+
### ✅ Phase 1: Quick Wins (3-4 weeks)
|
|
68
|
+
```
|
|
69
|
+
Option 1E (Compressed OTA) + Option 2A (Enhanced StatusPackage)
|
|
70
|
+
```
|
|
71
|
+
- Immediate 40-60% OTA speed improvement
|
|
72
|
+
- Standardized status reporting
|
|
73
|
+
- Low risk, high value
|
|
74
|
+
- Builds on existing code
|
|
75
|
+
|
|
76
|
+
### ✅ Phase 2: Production Ready (6-8 weeks)
|
|
77
|
+
```
|
|
78
|
+
Option 1A (Broadcast OTA) + Option 2E (MQTT Bridge)
|
|
79
|
+
```
|
|
80
|
+
- Scalable OTA for larger meshes
|
|
81
|
+
- Cloud monitoring integration
|
|
82
|
+
- Enterprise features
|
|
83
|
+
- Professional deployment
|
|
84
|
+
|
|
85
|
+
### ✅ Phase 3: Advanced (3-4 months)
|
|
86
|
+
```
|
|
87
|
+
Option 1B (Progressive OTA) + Option 2C (Telemetry)
|
|
88
|
+
```
|
|
89
|
+
- Zero-downtime updates
|
|
90
|
+
- Real-time monitoring
|
|
91
|
+
- Proactive alerting
|
|
92
|
+
- Large-scale support
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 📋 Quick Comparison
|
|
97
|
+
|
|
98
|
+
### OTA Options at a Glance
|
|
99
|
+
|
|
100
|
+
| Option | Speed | Memory | Complexity | When to Use |
|
|
101
|
+
|--------|-------|--------|------------|-------------|
|
|
102
|
+
| **1E: Compression** | ⭐⭐⭐⭐ | +4-8KB | ⭐⭐ | **Start here** - Universal benefit |
|
|
103
|
+
| **1A: Broadcast** | ⭐⭐⭐⭐⭐ | +2-5KB | ⭐⭐⭐ | Medium-large mesh (10-100 nodes) |
|
|
104
|
+
| **1B: Progressive** | ⭐⭐ | +3-7KB | ⭐⭐⭐⭐ | Production safety critical |
|
|
105
|
+
| 1C: P2P | ⭐⭐⭐⭐⭐ | +200KB | ⭐⭐⭐⭐⭐ | Very large mesh (50+ nodes) |
|
|
106
|
+
| 1D: MQTT | ⭐⭐⭐ | +5-10KB | ⭐⭐⭐ | Already using MQTT |
|
|
107
|
+
|
|
108
|
+
### Status Options at a Glance
|
|
109
|
+
|
|
110
|
+
| Option | Real-time | Overhead | Complexity | When to Use |
|
|
111
|
+
|--------|-----------|----------|------------|-------------|
|
|
112
|
+
| **2A: Enhanced Pkg** | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | **Start here** - Simple integration |
|
|
113
|
+
| **2E: MQTT Bridge** | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ | Cloud monitoring needed |
|
|
114
|
+
| **2B: Status Service** | ⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ | Centralized control |
|
|
115
|
+
| 2C: Telemetry | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐⭐ | Real-time critical |
|
|
116
|
+
| 2D: Dashboard | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | User-facing app |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 💡 Decision Guide
|
|
121
|
+
|
|
122
|
+
### Choose OTA Option Based On:
|
|
123
|
+
|
|
124
|
+
**If mesh size < 10 nodes:**
|
|
125
|
+
- Start with **1E (Compression)** only
|
|
126
|
+
- Add **1A (Broadcast)** if frequent updates
|
|
127
|
+
|
|
128
|
+
**If mesh size 10-50 nodes:**
|
|
129
|
+
- Use **1E + 1A** (Compression + Broadcast)
|
|
130
|
+
- Add **1B (Progressive)** for production
|
|
131
|
+
|
|
132
|
+
**If mesh size > 50 nodes:**
|
|
133
|
+
- Use **1E + 1C** (Compression + P2P)
|
|
134
|
+
- Or **1E + 1A + 1B** if flash limited
|
|
135
|
+
|
|
136
|
+
**If MQTT already used:**
|
|
137
|
+
- Consider **1D (MQTT Bridge)** for integration
|
|
138
|
+
- Combine with **1E** for speed
|
|
139
|
+
|
|
140
|
+
### Choose Status Option Based On:
|
|
141
|
+
|
|
142
|
+
**For simple monitoring:**
|
|
143
|
+
- **2A (Enhanced StatusPackage)** - easiest start
|
|
144
|
+
|
|
145
|
+
**For cloud integration:**
|
|
146
|
+
- **2E (MQTT Bridge)** - Grafana, InfluxDB, etc.
|
|
147
|
+
|
|
148
|
+
**For real-time monitoring:**
|
|
149
|
+
- **2C (Telemetry Stream)** - continuous updates
|
|
150
|
+
|
|
151
|
+
**For user dashboards:**
|
|
152
|
+
- **2D (Health Dashboard)** - visual interface
|
|
153
|
+
|
|
154
|
+
**For API access:**
|
|
155
|
+
- **2B (Status Service)** - RESTful queries
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 🔧 Implementation Examples
|
|
160
|
+
|
|
161
|
+
### Phase 1 Code (Compression + Enhanced Status)
|
|
162
|
+
|
|
163
|
+
**Enable Compressed OTA:**
|
|
164
|
+
```cpp
|
|
165
|
+
// In sender node
|
|
166
|
+
#define PAINLESSMESH_ENABLE_OTA
|
|
167
|
+
#define OTA_COMPRESSION_ENABLED
|
|
168
|
+
|
|
169
|
+
mesh.initOTASend(firmwareCallback, OTA_PART_SIZE);
|
|
170
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts, false, false, true); // last param = compressed
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Enhanced Status Reporting:**
|
|
174
|
+
```cpp
|
|
175
|
+
#include "examples/alteriom/alteriom_sensor_package.hpp"
|
|
176
|
+
|
|
177
|
+
alteriom::EnhancedStatusPackage status;
|
|
178
|
+
status.uptime = millis() / 1000;
|
|
179
|
+
status.freeMemory = ESP.getFreeHeap() / 1024;
|
|
180
|
+
status.nodeCount = mesh.getNodeList().size();
|
|
181
|
+
status.firmwareVersion = "v1.2.3";
|
|
182
|
+
|
|
183
|
+
mesh.sendBroadcast(status.toJsonString());
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Phase 2 Code (Broadcast OTA + MQTT Status)
|
|
187
|
+
|
|
188
|
+
**Broadcast OTA:**
|
|
189
|
+
```cpp
|
|
190
|
+
// Sender enables broadcast mode
|
|
191
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts,
|
|
192
|
+
false, // not forced
|
|
193
|
+
true); // broadcast mode
|
|
194
|
+
|
|
195
|
+
// Receivers auto-detect broadcast
|
|
196
|
+
mesh.initOTAReceive("sensor", progressCallback);
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**MQTT Status Bridge:**
|
|
200
|
+
```cpp
|
|
201
|
+
#include "examples/bridge/mqtt_status_bridge.hpp"
|
|
202
|
+
|
|
203
|
+
MqttStatusBridge bridge(mesh, mqttClient);
|
|
204
|
+
bridge.setPublishInterval(30000); // 30s
|
|
205
|
+
bridge.enableTopology(true);
|
|
206
|
+
bridge.enableMetrics(true);
|
|
207
|
+
bridge.begin();
|
|
208
|
+
|
|
209
|
+
// Status published to:
|
|
210
|
+
// - mesh/status/nodes
|
|
211
|
+
// - mesh/status/topology
|
|
212
|
+
// - mesh/status/metrics
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
## 📈 Performance Expectations
|
|
218
|
+
|
|
219
|
+
### OTA Distribution Time (100KB firmware, 10 nodes)
|
|
220
|
+
|
|
221
|
+
| Method | Time | Bandwidth | Memory |
|
|
222
|
+
|--------|------|-----------|--------|
|
|
223
|
+
| Current | ~60s | 1MB | +1KB |
|
|
224
|
+
| + Compression (1E) | ~35s | 600KB | +5KB |
|
|
225
|
+
| + Broadcast (1A) | ~25s | 600KB | +7KB |
|
|
226
|
+
| + P2P (1C) | ~15s | 400KB | +205KB |
|
|
227
|
+
|
|
228
|
+
### Status Update Overhead
|
|
229
|
+
|
|
230
|
+
| Method | Frequency | Per Update | Total/hour |
|
|
231
|
+
|--------|-----------|------------|------------|
|
|
232
|
+
| Manual | On-demand | ~200B | Varies |
|
|
233
|
+
| Enhanced Pkg (2A) | 5 min | ~500B | ~6KB |
|
|
234
|
+
| MQTT Bridge (2E) | 30s | ~800B | ~96KB |
|
|
235
|
+
| Telemetry (2C) | 60s | ~64B | ~3.8KB |
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## ⚠️ Common Pitfalls
|
|
240
|
+
|
|
241
|
+
### OTA Implementation
|
|
242
|
+
- ❌ Don't forget to include OTA support in updated firmware (will brick nodes)
|
|
243
|
+
- ❌ Don't skip MD5 validation (corrupted firmware)
|
|
244
|
+
- ❌ Don't update all nodes at once without testing (mesh failure)
|
|
245
|
+
- ✅ DO test OTA on single node first
|
|
246
|
+
- ✅ DO implement rollback mechanism
|
|
247
|
+
- ✅ DO use progressive rollout for production
|
|
248
|
+
|
|
249
|
+
### Status Monitoring
|
|
250
|
+
- ❌ Don't poll status too frequently (network congestion)
|
|
251
|
+
- ❌ Don't ignore memory warnings (node crashes)
|
|
252
|
+
- ❌ Don't assume all nodes respond (timeouts happen)
|
|
253
|
+
- ✅ DO use appropriate update intervals (30-60s typically)
|
|
254
|
+
- ✅ DO implement timeout handling
|
|
255
|
+
- ✅ DO cache status at collection point
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## 🔗 Related Resources
|
|
260
|
+
|
|
261
|
+
- **Full Proposal:** `docs/improvements/ota-and-status-enhancements.md`
|
|
262
|
+
- **Current OTA Example:** `examples/otaSender/otaSender.ino`
|
|
263
|
+
- **Metrics System:** `src/painlessmesh/metrics.hpp`
|
|
264
|
+
- **Alteriom Packages:** `examples/alteriom/alteriom_sensor_package.hpp`
|
|
265
|
+
- **MQTT Bridge:** `examples/mqttBridge/mqttBridge.ino`
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## 🤝 Contributing
|
|
270
|
+
|
|
271
|
+
To implement any of these features:
|
|
272
|
+
|
|
273
|
+
1. Review full proposal document
|
|
274
|
+
2. Create design doc for specific option
|
|
275
|
+
3. Submit RFC to team
|
|
276
|
+
4. Implement with tests
|
|
277
|
+
5. Create examples
|
|
278
|
+
6. Update documentation
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
**Quick Start:** Begin with **Phase 1** (Option 1E + 2A) for immediate benefits with minimal risk.
|
|
283
|
+
|
|
284
|
+
**Questions?** See full proposal or open a GitHub issue.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Arduino Library Manager Compliance - Summary of Changes
|
|
2
|
+
|
|
3
|
+
## Issues Fixed
|
|
4
|
+
|
|
5
|
+
### 1. Library Name Conflict (Fixed ✅)
|
|
6
|
+
- **Problem**: Library name "Alteriom painlessMesh" contained spaces and was not unique
|
|
7
|
+
- **Solution**: Changed to "AlteriomPainlessMesh" (no spaces, unique identifier)
|
|
8
|
+
- **Files Modified**: `library.properties`
|
|
9
|
+
|
|
10
|
+
### 2. Missing Primary Header File (Fixed ✅)
|
|
11
|
+
- **Problem**: No header file matching the library name
|
|
12
|
+
- **Solution**: Created `src/AlteriomPainlessMesh.h` as the primary include
|
|
13
|
+
- **Files Created**: `src/AlteriomPainlessMesh.h`
|
|
14
|
+
- **Files Modified**: `library.properties` (updated includes field)
|
|
15
|
+
|
|
16
|
+
### 3. Example Sketch Naming Mismatch (Fixed ✅)
|
|
17
|
+
- **Problem**: Example folder `alteriom` didn't have a matching `alteriom.ino` file
|
|
18
|
+
- **Solution**: Created `examples/alteriom/alteriom.ino` with proper header inclusion
|
|
19
|
+
- **Files Created**: `examples/alteriom/alteriom.ino`
|
|
20
|
+
|
|
21
|
+
### 4. Test Sketches in Wrong Location (Fixed ✅)
|
|
22
|
+
- **Problem**: Arduino sketches found in `test/` directory (not allowed by Library Manager)
|
|
23
|
+
- **Solution**: Moved problematic sketches to `extras/test-sketches/`
|
|
24
|
+
- **Directories Moved**:
|
|
25
|
+
- `test/issue_521/` → `extras/test-sketches/issue_521/`
|
|
26
|
+
- `test/performance/` → `extras/test-sketches/performance/`
|
|
27
|
+
- `test/startHere/` → `extras/test-sketches/startHere/`
|
|
28
|
+
- `test/start_stop/` → `extras/test-sketches/start_stop/`
|
|
29
|
+
- `test/wifi/` → `extras/test-sketches/wifi/`
|
|
30
|
+
|
|
31
|
+
## Current Compliance Status
|
|
32
|
+
|
|
33
|
+
✅ **Library Properties**: All required fields present and valid
|
|
34
|
+
✅ **Naming Convention**: Library name "AlteriomPainlessMesh" is unique and compliant
|
|
35
|
+
✅ **Header File**: Primary header `src/AlteriomPainlessMesh.h` exists and matches library name
|
|
36
|
+
✅ **Examples Structure**: All example folders have matching .ino files
|
|
37
|
+
✅ **Directory Structure**: No Arduino sketches in prohibited locations
|
|
38
|
+
|
|
39
|
+
## Files Created/Modified
|
|
40
|
+
|
|
41
|
+
### New Files
|
|
42
|
+
- `src/AlteriomPainlessMesh.h` - Primary library header with comprehensive documentation
|
|
43
|
+
- `examples/alteriom/alteriom.ino` - Primary example matching folder name
|
|
44
|
+
- `extras/test-sketches/` - Directory for test sketches (moved from test/)
|
|
45
|
+
|
|
46
|
+
### Modified Files
|
|
47
|
+
- `library.properties` - Updated name, includes, and description for compliance
|
|
48
|
+
|
|
49
|
+
## Validation Results
|
|
50
|
+
|
|
51
|
+
The custom validation script confirms all major Arduino Library Manager requirements are met:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
🎉 All checks passed! Library should be compliant.
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Next Steps
|
|
58
|
+
|
|
59
|
+
1. **Optional**: Run official Arduino Lint tool when available for final verification
|
|
60
|
+
2. **Submit**: Library is ready for Arduino Library Manager submission
|
|
61
|
+
3. **Monitor**: Check for any additional feedback from Arduino Library Manager review process
|
|
62
|
+
|
|
63
|
+
## Documentation Integration
|
|
64
|
+
|
|
65
|
+
The library now includes:
|
|
66
|
+
- Complete Docsify documentation website in `docsify-site/`
|
|
67
|
+
- Automated Doxygen API documentation generation
|
|
68
|
+
- GitHub Actions workflow for documentation deployment
|
|
69
|
+
- Embedded API documentation viewing within the website
|
|
70
|
+
|
|
71
|
+
All changes maintain compatibility with existing painlessMesh functionality while adding Alteriom-specific enhancements and ensuring Arduino Library Manager compliance.
|