@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
|
@@ -1,69 +1,212 @@
|
|
|
1
|
-
# painlessMesh
|
|
2
|
-
|
|
3
|
-
This
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
1
|
+
# painlessMesh Improvements Documentation
|
|
2
|
+
|
|
3
|
+
This directory contains documentation for improvements made to painlessMesh, including completed features (Phases 1-2) and proposed enhancements (Phase 3+).
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Overview
|
|
8
|
+
|
|
9
|
+
The improvements focus on four key areas:
|
|
10
|
+
|
|
11
|
+
1. **Performance Optimization** - Memory management and processing efficiency
|
|
12
|
+
2. **Security & Robustness** - Input validation and attack prevention
|
|
13
|
+
3. **Monitoring & Diagnostics** - Performance metrics and health monitoring
|
|
14
|
+
4. **OTA & Status Enhancements** - Advanced firmware distribution and monitoring
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Documentation Structure
|
|
19
|
+
|
|
20
|
+
### 📋 Current State
|
|
21
|
+
|
|
22
|
+
**[OTA_STATUS_ENHANCEMENTS.md](OTA_STATUS_ENHANCEMENTS.md)** - Complete reference guide
|
|
23
|
+
- ✅ **Phase 1 (v1.6.x):** Compressed OTA + Enhanced Status Package
|
|
24
|
+
- ✅ **Phase 2 (v1.7.0):** Broadcast OTA + MQTT Status Bridge
|
|
25
|
+
- 📋 **Phase 3 (Future):** Progressive rollout, P2P distribution, telemetry streams
|
|
26
|
+
- Decision matrices, architecture diagrams, performance expectations
|
|
27
|
+
- Quick reference for choosing implementation options
|
|
28
|
+
|
|
29
|
+
### 🔧 Technical Details
|
|
30
|
+
|
|
31
|
+
**[IMPLEMENTATION_HISTORY.md](IMPLEMENTATION_HISTORY.md)** - Implementation details for Phases 1-2
|
|
32
|
+
- Technical specifications and code changes
|
|
33
|
+
- Performance analysis and benchmarks
|
|
34
|
+
- Testing documentation (80 assertions passing)
|
|
35
|
+
- Files modified and API changes
|
|
36
|
+
- Memory impact and scalability analysis
|
|
37
|
+
|
|
38
|
+
### 🚀 Future Roadmap
|
|
39
|
+
|
|
40
|
+
**[FUTURE_PROPOSALS.md](FUTURE_PROPOSALS.md)** - Proposed Phase 3+ features
|
|
41
|
+
- Progressive Rollout OTA (Option 1B) - Zero-downtime updates
|
|
42
|
+
- Peer-to-Peer Distribution (Option 1C) - Viral propagation for 100+ nodes
|
|
43
|
+
- MQTT-Integrated OTA (Option 1D) - Cloud-based management
|
|
44
|
+
- Mesh Status Service (Option 2B) - RESTful API for status queries
|
|
45
|
+
- Telemetry Stream (Option 2C) - Real-time monitoring with delta encoding
|
|
46
|
+
- Health Dashboard (Option 2D) - Web-based management interface
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Completed Features
|
|
51
|
+
|
|
52
|
+
### Core Library Improvements
|
|
53
|
+
|
|
54
|
+
**1. Input Validation & Security (`validation.hpp`)**
|
|
55
|
+
- JSON schema validation and field type checking
|
|
56
|
+
- Per-node rate limiting to prevent spam
|
|
57
|
+
- Hardware-based secure random number generation
|
|
58
|
+
- Node ID validation
|
|
59
|
+
|
|
60
|
+
**2. Performance Metrics & Monitoring (`metrics.hpp`)**
|
|
61
|
+
- Message statistics (throughput, latency, error tracking)
|
|
62
|
+
- Memory monitoring (heap tracking, peak usage, alerts)
|
|
63
|
+
- Network topology (connection stability, hop analysis)
|
|
64
|
+
- JSON reports for integration with monitoring systems
|
|
65
|
+
|
|
66
|
+
**3. Memory Management Optimization (`memory.hpp`)**
|
|
67
|
+
- Object pooling to minimize allocation overhead
|
|
68
|
+
- Pre-allocated string buffers
|
|
69
|
+
- Memory statistics and leak detection
|
|
70
|
+
|
|
71
|
+
**4. Protocol Improvements**
|
|
72
|
+
- Issue #521 resolution (protocol::Variant copy operations)
|
|
73
|
+
- Move semantics for efficient operations
|
|
74
|
+
- Enhanced zero-copy buffer operations
|
|
75
|
+
|
|
76
|
+
### OTA & Status Features (Phases 1-2)
|
|
77
|
+
|
|
78
|
+
**Phase 1 (v1.6.x):**
|
|
79
|
+
- ✅ Compressed OTA infrastructure (40-60% bandwidth reduction)
|
|
80
|
+
- ✅ Enhanced StatusPackage (18 comprehensive fields)
|
|
81
|
+
|
|
82
|
+
**Phase 2 (v1.7.0):**
|
|
83
|
+
- ✅ Broadcast OTA (98% traffic reduction for 50-node mesh)
|
|
84
|
+
- ✅ MQTT Status Bridge (Grafana/InfluxDB integration)
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Performance Impact
|
|
89
|
+
|
|
90
|
+
**Core Improvements:**
|
|
91
|
+
- Memory usage: 10-20% reduction in fragmentation
|
|
92
|
+
- Message processing: 5-15% faster validation
|
|
93
|
+
- Network efficiency: Reduced retransmissions
|
|
94
|
+
- CPU usage: More efficient algorithms
|
|
95
|
+
|
|
96
|
+
**OTA Improvements (Phase 1-2):**
|
|
97
|
+
- Update speed: 75% faster (Phase 2 broadcast mode)
|
|
98
|
+
- Network bandwidth: 50% reduction (Phase 1 compression) + 98% reduction (Phase 2 broadcast)
|
|
99
|
+
- Scalability: Proven up to 50-100 nodes
|
|
100
|
+
- Memory overhead: +7-13KB total
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Testing & Quality
|
|
105
|
+
|
|
106
|
+
- ✅ **100% Test Pass Rate**: All existing and new tests pass
|
|
107
|
+
- ✅ **80 Assertions**: Comprehensive Phase 1-2 test coverage
|
|
108
|
+
- ✅ **No Regressions**: Backward compatibility maintained
|
|
109
|
+
- ✅ **Static Analysis**: Code passes all checks
|
|
110
|
+
- ✅ **Memory Testing**: No leaks detected
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Quick Start
|
|
115
|
+
|
|
116
|
+
### "How do I use the new OTA features?"
|
|
117
|
+
|
|
118
|
+
**Phase 1-2 are available now in v1.7.0:**
|
|
119
|
+
|
|
120
|
+
```cpp
|
|
121
|
+
// Enable compressed + broadcast OTA (both Phase 1 and 2 features)
|
|
122
|
+
mesh.offerOTA("sensor", "ESP32", md5, parts, false, true, true);
|
|
123
|
+
// ^^^^^ ^^^^ ^^^^
|
|
124
|
+
// forced bcast compress
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
**See:** [OTA_STATUS_ENHANCEMENTS.md](OTA_STATUS_ENHANCEMENTS.md) for decision guide
|
|
128
|
+
|
|
129
|
+
### "How do I use the new status monitoring?"
|
|
130
|
+
|
|
131
|
+
**Enhanced StatusPackage (Phase 1):**
|
|
132
|
+
|
|
133
|
+
```cpp
|
|
134
|
+
#include "examples/alteriom/alteriom_sensor_package.hpp"
|
|
135
|
+
|
|
136
|
+
alteriom::EnhancedStatusPackage status;
|
|
137
|
+
status.uptime = millis() / 1000;
|
|
138
|
+
status.freeMemory = ESP.getFreeHeap() / 1024;
|
|
139
|
+
status.nodeCount = mesh.getNodeList().size();
|
|
140
|
+
mesh.sendBroadcast(status.toJsonString());
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**MQTT Bridge (Phase 2):**
|
|
144
|
+
|
|
145
|
+
```cpp
|
|
146
|
+
#include "examples/bridge/mqtt_status_bridge.hpp"
|
|
147
|
+
|
|
148
|
+
MqttStatusBridge bridge(mesh, mqttClient);
|
|
149
|
+
bridge.setPublishInterval(30000); // 30 seconds
|
|
150
|
+
bridge.begin();
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**See:** [OTA_STATUS_ENHANCEMENTS.md](OTA_STATUS_ENHANCEMENTS.md) for detailed usage
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Examples
|
|
158
|
+
|
|
159
|
+
**Core Improvements:**
|
|
160
|
+
- `examples/alteriom/improved_sensor_node.ino` - Demonstrates validation and metrics
|
|
161
|
+
|
|
162
|
+
**Phase 1-2 Features:**
|
|
163
|
+
- `examples/alteriom/phase1_features.ino` - Compressed OTA + Enhanced Status
|
|
164
|
+
- `examples/alteriom/phase2_features.ino` - Broadcast OTA + MQTT Bridge
|
|
165
|
+
- `examples/bridge/mqtt_bridge_example.ino` - MQTT integration example
|
|
166
|
+
- `examples/otaSender/otaSender.ino` - OTA sender implementation
|
|
167
|
+
- `examples/otaReceiver/otaReceiver.ino` - OTA receiver implementation
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Related Documentation
|
|
172
|
+
|
|
173
|
+
### User Documentation
|
|
174
|
+
- [Feature History](../releases/FEATURE_HISTORY.md) - User-facing docs, migration guides, usage patterns
|
|
175
|
+
- [Phase 1 Guide](../PHASE1_GUIDE.md) - Complete Phase 1 usage guide (if exists)
|
|
176
|
+
- [Phase 2 Guide](../PHASE2_GUIDE.md) - Complete Phase 2 usage guide (if exists)
|
|
177
|
+
|
|
178
|
+
### API Documentation
|
|
179
|
+
- [Core API Reference](../api/core-api.md) - API documentation
|
|
180
|
+
- [Metrics API](../../src/painlessmesh/metrics.hpp) - Performance metrics
|
|
181
|
+
- [Validation API](../../src/painlessmesh/validation.hpp) - Input validation
|
|
182
|
+
- [Alteriom Packages](../../examples/alteriom/alteriom_sensor_package.hpp) - Package definitions
|
|
183
|
+
|
|
184
|
+
### Architecture
|
|
185
|
+
- [Mesh Architecture](../architecture/mesh-architecture.md) - Core architecture
|
|
186
|
+
- [Plugin System](../architecture/plugin-system.md) - Plugin architecture
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## Contributing
|
|
191
|
+
|
|
192
|
+
Interested in implementing Phase 3 features or improving existing ones?
|
|
193
|
+
|
|
194
|
+
1. Review [FUTURE_PROPOSALS.md](FUTURE_PROPOSALS.md) for detailed specifications
|
|
195
|
+
2. Check [GitHub Issues](https://github.com/Alteriom/painlessMesh/issues) for discussions
|
|
196
|
+
3. Read [Contributing Guide](../development/contributing.md) for workflow
|
|
197
|
+
4. Open an issue to discuss your implementation plan
|
|
198
|
+
5. Submit a pull request with implementation and tests
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Questions & Support
|
|
203
|
+
|
|
204
|
+
- **GitHub Issues:** <https://github.com/Alteriom/painlessMesh/issues>
|
|
205
|
+
- **Discussions:** <https://github.com/Alteriom/painlessMesh/discussions>
|
|
206
|
+
- **Documentation:** <https://alteriom.github.io/painlessMesh/>
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
**Last Updated:** October 2025
|
|
211
|
+
**Current Version:** v1.7.0
|
|
212
|
+
**Status:** Phases 1-2 Complete ✅ | Phase 3 Proposed 📋
|
|
@@ -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! 🎉
|