@alteriom/painlessmesh 1.6.1 → 1.7.2
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 +380 -143
- package/LICENSE +674 -674
- package/README.md +477 -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 +77 -70
- 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/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/FEATURE_PROPOSALS.md +337 -0
- package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
- package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
- package/docs/improvements/README.md +86 -68
- package/docs/improvements/ota-and-status-enhancements.md +911 -0
- package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
- package/docs/improvements/ota-status-quick-reference.md +284 -0
- package/docs/platformio-publishing.md +255 -0
- package/docs/platformio-setup-summary.md +121 -0
- package/docs/troubleshooting/common-issues.md +520 -520
- 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 +322 -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,255 @@
|
|
|
1
|
+
# PlatformIO Library Publishing Guide
|
|
2
|
+
|
|
3
|
+
This guide explains how to publish the AlteriomPainlessMesh library to the PlatformIO Library Registry.
|
|
4
|
+
|
|
5
|
+
## Prerequisites
|
|
6
|
+
|
|
7
|
+
### 1. PlatformIO Account Setup
|
|
8
|
+
|
|
9
|
+
1. Visit [https://platformio.org/](https://platformio.org/) and create an account
|
|
10
|
+
2. Verify your email address
|
|
11
|
+
3. Log in to your PlatformIO account
|
|
12
|
+
|
|
13
|
+
### 2. Authentication Token
|
|
14
|
+
|
|
15
|
+
1. Go to [https://platformio.org/account/token](https://platformio.org/account/token)
|
|
16
|
+
2. Generate a new Personal Access Token
|
|
17
|
+
3. Copy the token and store it securely
|
|
18
|
+
4. Set up the token in your local environment:
|
|
19
|
+
|
|
20
|
+
```powershell
|
|
21
|
+
# Set environment variable (Windows PowerShell)
|
|
22
|
+
$env:PLATFORMIO_AUTH_TOKEN="YOUR_TOKEN_HERE"
|
|
23
|
+
|
|
24
|
+
# Or for Command Prompt
|
|
25
|
+
set PLATFORMIO_AUTH_TOKEN=YOUR_TOKEN_HERE
|
|
26
|
+
|
|
27
|
+
# Or use login command
|
|
28
|
+
pio account login
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Library Configuration
|
|
32
|
+
4. Set up the token in your local environment:
|
|
33
|
+
```powershell
|
|
34
|
+
pio account token --set YOUR_TOKEN_HERE
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Library Configuration
|
|
38
|
+
|
|
39
|
+
### Required Files
|
|
40
|
+
Ensure these files are properly configured:
|
|
41
|
+
|
|
42
|
+
#### 1. `library.json` (Primary PlatformIO Configuration)
|
|
43
|
+
```json
|
|
44
|
+
{
|
|
45
|
+
"name": "AlteriomPainlessMesh",
|
|
46
|
+
"keywords": "ethernet, m2m, iot, mesh, alteriom, sensor, esp32, esp8266, json, time-sync, wireless, communication",
|
|
47
|
+
"description": "painlessMesh library with Alteriom extensions for sensor networks",
|
|
48
|
+
"repository": {
|
|
49
|
+
"type": "git",
|
|
50
|
+
"url": "https://github.com/Alteriom/painlessMesh"
|
|
51
|
+
},
|
|
52
|
+
"version": "1.6.1",
|
|
53
|
+
"frameworks": ["arduino"],
|
|
54
|
+
"platforms": ["espressif8266", "espressif32"],
|
|
55
|
+
"dependencies": [...],
|
|
56
|
+
"authors": [...],
|
|
57
|
+
"license": "LGPL-3.0",
|
|
58
|
+
"homepage": "https://github.com/Alteriom/painlessMesh",
|
|
59
|
+
"headers": "painlessMesh.h",
|
|
60
|
+
"examples": ["examples/basic/basic.ino", "examples/alteriom/alteriom_sensor_node.ino"],
|
|
61
|
+
"export": {
|
|
62
|
+
"include": "src"
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### 2. `library.properties` (Arduino Library Manager)
|
|
68
|
+
Should remain compatible for dual publishing:
|
|
69
|
+
```properties
|
|
70
|
+
name=AlteriomPainlessMesh
|
|
71
|
+
version=1.6.1
|
|
72
|
+
author=Coopdis,Scotty Franzyshen,Edwin van Leeuwen,Germán Martín,Maximilian Schwarz,Doanh Doanh,Alteriom
|
|
73
|
+
maintainer=Alteriom
|
|
74
|
+
sentence=A painless way to setup a mesh with ESP8266 and ESP32 devices with Alteriom extensions
|
|
75
|
+
paragraph=...
|
|
76
|
+
category=Communication
|
|
77
|
+
url=https://github.com/Alteriom/painlessMesh
|
|
78
|
+
architectures=esp8266,esp32
|
|
79
|
+
includes=AlteriomPainlessMesh.h
|
|
80
|
+
depends=ArduinoJson, TaskScheduler
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Publishing Process
|
|
84
|
+
|
|
85
|
+
### Method 1: Git Tag Publishing (Recommended)
|
|
86
|
+
|
|
87
|
+
This method automatically publishes when you create a Git tag:
|
|
88
|
+
|
|
89
|
+
1. **Ensure all files are committed and pushed:**
|
|
90
|
+
```powershell
|
|
91
|
+
git add .
|
|
92
|
+
git commit -m "Prepare v1.6.1 for PlatformIO Library Registry"
|
|
93
|
+
git push origin main
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
2. **Create and push a Git tag:**
|
|
97
|
+
```powershell
|
|
98
|
+
git tag v1.6.1
|
|
99
|
+
git push origin v1.6.1
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
3. **PlatformIO will automatically detect the new tag and import the library**
|
|
103
|
+
- Monitor at: [https://platformio.org/lib/show/LIBRARY_ID/AlteriomPainlessMesh](https://platformio.org/lib)
|
|
104
|
+
- It may take 5-15 minutes for the library to appear
|
|
105
|
+
|
|
106
|
+
### Method 2: Manual Package Upload
|
|
107
|
+
|
|
108
|
+
If automatic detection doesn't work:
|
|
109
|
+
|
|
110
|
+
1. **Create a tarball of your library:**
|
|
111
|
+
```powershell
|
|
112
|
+
# Create archive excluding unnecessary files
|
|
113
|
+
tar --exclude='.git' --exclude='test' --exclude='bin' --exclude='.vscode' --exclude='node_modules' -czf AlteriomPainlessMesh-1.6.1.tar.gz .
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
2. **Submit via PlatformIO Library Registry:**
|
|
117
|
+
- Visit [https://platformio.org/lib/register](https://platformio.org/lib/register)
|
|
118
|
+
- Upload the created tarball
|
|
119
|
+
- Fill in any additional metadata
|
|
120
|
+
|
|
121
|
+
### Method 3: Using PlatformIO CLI
|
|
122
|
+
|
|
123
|
+
```powershell
|
|
124
|
+
# Ensure you're authenticated
|
|
125
|
+
pio account token --set YOUR_TOKEN_HERE
|
|
126
|
+
|
|
127
|
+
# Publish the library
|
|
128
|
+
pio pkg publish .
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Verification
|
|
132
|
+
|
|
133
|
+
### 1. Check Library Status
|
|
134
|
+
```powershell
|
|
135
|
+
# Search for your published library
|
|
136
|
+
pio pkg search "AlteriomPainlessMesh"
|
|
137
|
+
|
|
138
|
+
# View detailed information
|
|
139
|
+
pio pkg show alteriom/AlteriomPainlessMesh
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 2. Test Installation
|
|
143
|
+
Create a test project to verify the library can be installed:
|
|
144
|
+
```powershell
|
|
145
|
+
mkdir test_project
|
|
146
|
+
cd test_project
|
|
147
|
+
pio project init --board esp32dev
|
|
148
|
+
|
|
149
|
+
# Add to platformio.ini:
|
|
150
|
+
# lib_deps = alteriom/AlteriomPainlessMesh@^1.6.1
|
|
151
|
+
|
|
152
|
+
pio pkg install
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Updating the Library
|
|
156
|
+
|
|
157
|
+
For future releases:
|
|
158
|
+
|
|
159
|
+
1. **Update version numbers:**
|
|
160
|
+
- `library.json` → `"version": "1.6.2"`
|
|
161
|
+
- `library.properties` → `version=1.6.2`
|
|
162
|
+
- `package.json` → `"version": "1.6.2"`
|
|
163
|
+
|
|
164
|
+
2. **Commit changes:**
|
|
165
|
+
```powershell
|
|
166
|
+
git add .
|
|
167
|
+
git commit -m "Bump version to 1.6.2"
|
|
168
|
+
git push origin main
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
3. **Create new tag:**
|
|
172
|
+
```powershell
|
|
173
|
+
git tag v1.6.2
|
|
174
|
+
git push origin v1.6.2
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
4. **Verify update appears in registry**
|
|
178
|
+
|
|
179
|
+
## Troubleshooting
|
|
180
|
+
|
|
181
|
+
### Common Issues
|
|
182
|
+
|
|
183
|
+
1. **Library name conflicts:**
|
|
184
|
+
- Use a unique name like "AlteriomPainlessMesh" instead of "painlessMesh"
|
|
185
|
+
- Check existing libraries: `pio pkg search "painless"`
|
|
186
|
+
|
|
187
|
+
2. **Authentication errors:**
|
|
188
|
+
- Verify token: `pio account show`
|
|
189
|
+
- Regenerate token if needed
|
|
190
|
+
|
|
191
|
+
3. **Dependency resolution errors:**
|
|
192
|
+
- Ensure all dependencies exist in PlatformIO Registry
|
|
193
|
+
- Check version constraints (use `^` for flexible versions)
|
|
194
|
+
|
|
195
|
+
4. **Git repository requirements:**
|
|
196
|
+
- Repository must be publicly accessible
|
|
197
|
+
- Tags must follow semantic versioning (v1.6.1)
|
|
198
|
+
- library.json must be in repository root
|
|
199
|
+
|
|
200
|
+
### Useful Commands
|
|
201
|
+
|
|
202
|
+
```powershell
|
|
203
|
+
# Check authentication status
|
|
204
|
+
pio account show
|
|
205
|
+
|
|
206
|
+
# List all your published packages
|
|
207
|
+
pio pkg search --owner="YOUR_USERNAME"
|
|
208
|
+
|
|
209
|
+
# View package statistics
|
|
210
|
+
pio pkg stats
|
|
211
|
+
|
|
212
|
+
# Update package metadata
|
|
213
|
+
pio pkg update
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
## Best Practices
|
|
217
|
+
|
|
218
|
+
1. **Semantic Versioning:**
|
|
219
|
+
- Use format: MAJOR.MINOR.PATCH (e.g., 1.6.1)
|
|
220
|
+
- Increment MAJOR for breaking changes
|
|
221
|
+
- Increment MINOR for new features
|
|
222
|
+
- Increment PATCH for bug fixes
|
|
223
|
+
|
|
224
|
+
2. **Documentation:**
|
|
225
|
+
- Include comprehensive README.md
|
|
226
|
+
- Provide working examples in examples/ directory
|
|
227
|
+
- Document all public APIs
|
|
228
|
+
|
|
229
|
+
3. **Testing:**
|
|
230
|
+
- Test library installation in clean environments
|
|
231
|
+
- Verify examples compile successfully
|
|
232
|
+
- Test on both ESP8266 and ESP32 platforms
|
|
233
|
+
|
|
234
|
+
4. **Dependency Management:**
|
|
235
|
+
- Specify minimum required versions
|
|
236
|
+
- Use version ranges (^1.6.0) for flexibility
|
|
237
|
+
- Platform-specific dependencies when needed
|
|
238
|
+
|
|
239
|
+
## PlatformIO Library Registry URLs
|
|
240
|
+
|
|
241
|
+
- **Library Registry:** [https://platformio.org/lib](https://platformio.org/lib)
|
|
242
|
+
- **Account Management:** [https://platformio.org/account](https://platformio.org/account)
|
|
243
|
+
- **Submit Library:** [https://platformio.org/lib/register](https://platformio.org/lib/register)
|
|
244
|
+
- **Documentation:** [https://docs.platformio.org/en/latest/librarymanager/index.html](https://docs.platformio.org/en/latest/librarymanager/index.html)
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
**Note:** After successful publication, users will be able to install your library using:
|
|
249
|
+
```ini
|
|
250
|
+
[env:esp32dev]
|
|
251
|
+
platform = espressif32
|
|
252
|
+
board = esp32dev
|
|
253
|
+
framework = arduino
|
|
254
|
+
lib_deps = alteriom/AlteriomPainlessMesh@^1.6.1
|
|
255
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# PlatformIO Publishing Setup Summary
|
|
2
|
+
|
|
3
|
+
## ✅ What's Been Implemented
|
|
4
|
+
|
|
5
|
+
### 1. Dedicated PlatformIO Publishing Workflow
|
|
6
|
+
- **File**: `.github/workflows/platformio-publish.yml`
|
|
7
|
+
- **Triggers**: Automatic on releases, manual dispatch for testing
|
|
8
|
+
- **Features**: Complete validation, authentication, and publishing pipeline
|
|
9
|
+
|
|
10
|
+
### 2. Library Configuration Enhanced
|
|
11
|
+
- **Updated `library.json`**: PlatformIO-specific optimizations
|
|
12
|
+
- **Name**: Changed to "AlteriomPainlessMesh" for uniqueness
|
|
13
|
+
- **Dependencies**: All verified available in PlatformIO Registry
|
|
14
|
+
- **Metadata**: Enhanced with license, examples, export configuration
|
|
15
|
+
|
|
16
|
+
### 3. Release Process Integration
|
|
17
|
+
- **Main release workflow** now references PlatformIO publishing
|
|
18
|
+
- **Documentation updated** in `RELEASE_GUIDE.md`
|
|
19
|
+
- **Comprehensive instructions** in `docs/platformio-publishing.md`
|
|
20
|
+
|
|
21
|
+
## 🚀 How It Works
|
|
22
|
+
|
|
23
|
+
### Automatic Publishing
|
|
24
|
+
1. **Release Created**: GitHub release triggers PlatformIO workflow
|
|
25
|
+
2. **Validation**: Library.json format and dependencies checked
|
|
26
|
+
3. **Authentication**: Uses `PLATFORMIO_AUTH_TOKEN` secret
|
|
27
|
+
4. **Publication**: Direct publishing via PlatformIO CLI
|
|
28
|
+
5. **Verification**: Registry confirmation and user notification
|
|
29
|
+
|
|
30
|
+
### Manual Publishing (Alternative)
|
|
31
|
+
1. Go to GitHub Actions → PlatformIO Library Publishing
|
|
32
|
+
2. Click "Run workflow"
|
|
33
|
+
3. Enter version number and optional force publish
|
|
34
|
+
4. Workflow handles the rest
|
|
35
|
+
|
|
36
|
+
## 🔧 Setup Required
|
|
37
|
+
|
|
38
|
+
### One-Time Setup: PlatformIO Account
|
|
39
|
+
|
|
40
|
+
1. **Create Account**: <https://platformio.org/account/register>
|
|
41
|
+
2. **Generate Token**: <https://platformio.org/account/token>
|
|
42
|
+
3. **Add to Secrets**: Repository Settings → Secrets → Actions
|
|
43
|
+
- Name: `PLATFORMIO_AUTH_TOKEN`
|
|
44
|
+
- Value: [your token from step 2]
|
|
45
|
+
|
|
46
|
+
**Local Testing (Optional):**
|
|
47
|
+
```powershell
|
|
48
|
+
# Method 1: Environment variable
|
|
49
|
+
$env:PLATFORMIO_AUTH_TOKEN="YOUR_TOKEN_HERE"
|
|
50
|
+
pio account show # Verify authentication
|
|
51
|
+
|
|
52
|
+
# Method 2: Interactive login (if token doesn't work)
|
|
53
|
+
pio account login
|
|
54
|
+
|
|
55
|
+
# Test publishing
|
|
56
|
+
pio pkg publish . --no-interactive
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Troubleshooting Authentication:**
|
|
60
|
+
```powershell
|
|
61
|
+
# If authentication fails:
|
|
62
|
+
1. Go to https://platformio.org/account/token
|
|
63
|
+
2. Copy your existing token OR generate a new one
|
|
64
|
+
3. Set it as environment variable: $env:PLATFORMIO_AUTH_TOKEN="token"
|
|
65
|
+
4. Test: pio account show
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Current Status for v1.6.1
|
|
69
|
+
Since v1.6.1 is already released and published to other platforms:
|
|
70
|
+
|
|
71
|
+
#### Option A: Test with Manual Workflow
|
|
72
|
+
```
|
|
73
|
+
1. Go to: https://github.com/Alteriom/painlessMesh/actions/workflows/platformio-publish.yml
|
|
74
|
+
2. Click "Run workflow"
|
|
75
|
+
3. Set version: 1.6.1
|
|
76
|
+
4. Enable force_publish: true
|
|
77
|
+
5. Click "Run workflow"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Option B: Wait for Next Release
|
|
81
|
+
The PlatformIO workflow will automatically trigger on your next release (v1.6.2, etc.)
|
|
82
|
+
|
|
83
|
+
## 📋 Future Releases
|
|
84
|
+
|
|
85
|
+
For all future releases, PlatformIO publishing is now **fully automated**:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Standard release process remains the same
|
|
89
|
+
./scripts/bump-version.sh patch
|
|
90
|
+
# Edit CHANGELOG.md
|
|
91
|
+
git add . && git commit -m "release: v1.6.2" && git push
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
This will now automatically:
|
|
95
|
+
- ✅ Create GitHub release
|
|
96
|
+
- ✅ Publish to NPM
|
|
97
|
+
- ✅ **Publish to PlatformIO Registry**
|
|
98
|
+
- ✅ Update GitHub Wiki
|
|
99
|
+
- ✅ Prepare Arduino Library Manager package
|
|
100
|
+
|
|
101
|
+
## 🔍 Verification
|
|
102
|
+
|
|
103
|
+
After publishing, verify at:
|
|
104
|
+
- **Registry**: <https://registry.platformio.org/libraries>
|
|
105
|
+
- **Search**: Search for "AlteriomPainlessMesh"
|
|
106
|
+
- **Installation**: `pio pkg install --library "alteriom/AlteriomPainlessMesh@^1.6.1"`
|
|
107
|
+
|
|
108
|
+
## 📚 Documentation
|
|
109
|
+
|
|
110
|
+
Complete documentation available:
|
|
111
|
+
- **Publishing Guide**: `docs/platformio-publishing.md`
|
|
112
|
+
- **Release Process**: `RELEASE_GUIDE.md` (updated)
|
|
113
|
+
- **Workflow Details**: `.github/workflows/platformio-publish.yml`
|
|
114
|
+
|
|
115
|
+
## 🎯 Next Steps
|
|
116
|
+
|
|
117
|
+
1. **Add PlatformIO Token**: Set up the `PLATFORMIO_AUTH_TOKEN` secret
|
|
118
|
+
2. **Test Workflow**: Run manual workflow for v1.6.1 (optional)
|
|
119
|
+
3. **Next Release**: PlatformIO publishing will be automatic
|
|
120
|
+
|
|
121
|
+
The PlatformIO publishing is now fully integrated into your release pipeline! 🎉
|