@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.
Files changed (152) hide show
  1. package/CHANGELOG.md +435 -144
  2. package/LICENSE +674 -674
  3. package/README.md +491 -434
  4. package/RELEASE_GUIDE.md +504 -418
  5. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
  6. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
  7. package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
  8. package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
  9. package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
  10. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
  11. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
  12. package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
  13. package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
  14. package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
  15. package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
  16. package/docs/PHASE1_GUIDE.md +349 -0
  17. package/docs/PHASE2_GUIDE.md +543 -0
  18. package/docs/README.md +130 -71
  19. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
  20. package/docs/alteriom/overview.md +507 -507
  21. package/docs/api/core-api.md +606 -606
  22. package/docs/architecture/mesh-architecture.md +378 -378
  23. package/docs/architecture/plugin-system.md +516 -516
  24. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +166 -0
  25. package/docs/archive/FEATURE_PROPOSALS.md +337 -0
  26. package/docs/archive/LIBRARY_JSON_FIX.md +98 -0
  27. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +215 -0
  28. package/docs/archive/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/archive/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/archive/RELEASE_SUMMARY.md +173 -0
  31. package/docs/archive/SCONS_BUILD_FIX.md +313 -0
  32. package/docs/archive/TRIGGER_RELEASE.md +280 -0
  33. package/docs/archive/VECTOR_INCLUDE_FIX.md +129 -0
  34. package/docs/archive/ota-and-status-enhancements.md +911 -0
  35. package/docs/archive/ota-status-architecture-diagrams.md +658 -0
  36. package/docs/archive/ota-status-quick-reference.md +284 -0
  37. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +71 -0
  38. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +1011 -0
  39. package/docs/development/DOCKER_TESTING.md +196 -0
  40. package/docs/development/PLATFORMIO_USAGE.md +180 -0
  41. package/docs/development/TESTING_SUMMARY.md +126 -0
  42. package/docs/development/contributing.md +301 -0
  43. package/docs/development/documentation.md +583 -0
  44. package/docs/getting-started/first-mesh.md +409 -409
  45. package/docs/getting-started/installation.md +274 -274
  46. package/docs/getting-started/quickstart.md +157 -157
  47. package/docs/improvements/FUTURE_PROPOSALS.md +1016 -0
  48. package/docs/improvements/IMPLEMENTATION_HISTORY.md +1091 -0
  49. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +709 -0
  50. package/docs/improvements/README.md +212 -69
  51. package/docs/platformio-publishing.md +255 -0
  52. package/docs/platformio-setup-summary.md +121 -0
  53. package/docs/releases/FEATURE_HISTORY.md +543 -0
  54. package/docs/releases/PATCH_v1.7.3.md +262 -0
  55. package/docs/releases/PHASE1_SUMMARY.md +246 -0
  56. package/docs/releases/PHASE2_SUMMARY.md +499 -0
  57. package/docs/releases/RELEASE_NOTES_1.7.0.md +539 -0
  58. package/docs/troubleshooting/common-issues.md +520 -520
  59. package/docs/troubleshooting/debugging.md +455 -0
  60. package/docs/troubleshooting/faq.md +472 -472
  61. package/docs/tutorials/basic-examples.md +717 -717
  62. package/docs/wiki/API-Reference.md +245 -245
  63. package/docs/wiki/Complete-Documentation.md +122 -122
  64. package/examples/alteriom/README.md +139 -81
  65. package/examples/alteriom/alteriom.ino +186 -185
  66. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  67. package/examples/alteriom/platformio.ini +24 -24
  68. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  69. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  70. package/examples/alteriomImproved/platformio.ini +25 -0
  71. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  72. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  73. package/examples/alteriomPhase1/platformio.ini +25 -0
  74. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  75. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  76. package/examples/alteriomPhase2/platformio.ini +25 -0
  77. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  78. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  79. package/examples/alteriomSensorNode/platformio.ini +25 -0
  80. package/examples/basic/basic.ino +66 -66
  81. package/examples/basic/platformio.ini +25 -25
  82. package/examples/bridge/bridge.ino +51 -51
  83. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  84. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  85. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  86. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  87. package/examples/bridge/platformio.ini +25 -25
  88. package/examples/echoNode/echoNode.ino +33 -33
  89. package/examples/echoNode/platformio.ini +25 -25
  90. package/examples/logClient/logClient.ino +109 -109
  91. package/examples/logClient/platformio.ini +25 -25
  92. package/examples/logServer/logServer.ino +81 -81
  93. package/examples/logServer/platformio.ini +25 -25
  94. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  95. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  96. package/examples/meshCommandNode/platformio.ini +25 -0
  97. package/examples/mqttBridge/mqttBridge.ino +118 -118
  98. package/examples/mqttBridge/platformio.ini +26 -26
  99. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  100. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  101. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  102. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  103. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  104. package/examples/mqttCommandBridge/platformio.ini +26 -0
  105. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  106. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  107. package/examples/mqttStatusBridge/platformio.ini +26 -0
  108. package/examples/mqttTopologyTest/README.md +467 -0
  109. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  110. package/examples/mqttTopologyTest/platformio.ini +26 -0
  111. package/examples/namedMesh/namedMesh.ino +97 -97
  112. package/examples/namedMesh/platformio.ini +25 -25
  113. package/examples/otaReceiver/otaReceiver.ino +79 -79
  114. package/examples/otaReceiver/platformio.ini +25 -25
  115. package/examples/otaSender/otaSender.ino +160 -151
  116. package/examples/otaSender/platformio.ini +25 -25
  117. package/examples/startHere/platformio.ini +25 -25
  118. package/examples/startHere/startHere.ino +159 -159
  119. package/examples/webServer/platformio.ini +27 -27
  120. package/examples/webServer/webServer.ino +89 -89
  121. package/keywords.txt +48 -48
  122. package/library.json +55 -34
  123. package/library.properties +10 -10
  124. package/package.json +86 -78
  125. package/src/AlteriomPainlessMesh.h +97 -97
  126. package/src/arduino/wifi.hpp +365 -365
  127. package/src/boost/asynctcp.hpp +279 -279
  128. package/src/painlessMesh.h +70 -70
  129. package/src/painlessMeshSTA.cpp +236 -236
  130. package/src/painlessMeshSTA.h +58 -58
  131. package/src/painlessTaskOptions.h +4 -4
  132. package/src/painlessmesh/base64.hpp +111 -111
  133. package/src/painlessmesh/buffer.hpp +229 -229
  134. package/src/painlessmesh/callback.hpp +91 -91
  135. package/src/painlessmesh/configuration.hpp +77 -77
  136. package/src/painlessmesh/connection.hpp +192 -192
  137. package/src/painlessmesh/layout.hpp +188 -188
  138. package/src/painlessmesh/logger.hpp +158 -158
  139. package/src/painlessmesh/memory.hpp +119 -119
  140. package/src/painlessmesh/mesh.hpp +761 -560
  141. package/src/painlessmesh/metrics.hpp +322 -322
  142. package/src/painlessmesh/ntp.hpp +263 -263
  143. package/src/painlessmesh/ota.hpp +582 -553
  144. package/src/painlessmesh/plugin.hpp +188 -188
  145. package/src/painlessmesh/protocol.hpp +813 -813
  146. package/src/painlessmesh/router.hpp +338 -322
  147. package/src/painlessmesh/tcp.hpp +71 -71
  148. package/src/painlessmesh/validation.hpp +238 -238
  149. package/src/plugin/performance.hpp +214 -214
  150. package/src/plugin/remote.hpp +64 -64
  151. package/src/scheduler.cpp +10 -10
  152. package/src/wifi.cpp +2 -2
@@ -1,69 +1,212 @@
1
- # painlessMesh Library Improvements
2
-
3
- This document outlines the comprehensive improvements made to the painlessMesh library to enhance performance, security, and maintainability.
4
-
5
- ## Overview
6
-
7
- The improvements focus on four key areas:
8
- 1. **Performance Optimization** - Memory management and processing efficiency
9
- 2. **Security & Robustness** - Input validation and attack prevention
10
- 3. **Monitoring & Diagnostics** - Performance metrics and health monitoring
11
- 4. **Code Quality** - Bug fixes and maintainability improvements
12
-
13
- ## New Features
14
-
15
- ### 1. Input Validation & Security (`validation.hpp`)
16
-
17
- Comprehensive security framework to protect against malicious or malformed messages.
18
-
19
- - **Message Validation**: JSON schema validation, field type checking, size limits
20
- - **Rate Limiting**: Per-node message rate limiting to prevent spam
21
- - **Secure Random**: Hardware-based random number generation
22
- - **Node ID Validation**: Verify node IDs are within valid ranges
23
-
24
- ### 2. Performance Metrics & Monitoring (`metrics.hpp`)
25
-
26
- Advanced monitoring capabilities for performance optimization and diagnostics.
27
-
28
- - **Message Statistics**: Throughput, latency, error tracking, loss rate calculation
29
- - **Memory Monitoring**: Heap tracking, peak usage, critical alerts
30
- - **Network Topology**: Connection stability, node count tracking, hop analysis
31
- - **JSON Reports**: Detailed status reports for integration with monitoring systems
32
-
33
- ### 3. Memory Management Optimization (`memory.hpp`)
34
-
35
- Efficient memory management to reduce fragmentation and improve performance.
36
-
37
- - **Object Pooling**: Reuse objects to minimize allocation overhead
38
- - **String Buffers**: Pre-allocated buffers to avoid frequent reallocations
39
- - **Memory Statistics**: Track allocations and detect leaks
40
-
41
- ### 4. Protocol Improvements
42
-
43
- Fixed critical issues and enhanced performance of core protocol handling.
44
-
45
- - **Issue #521 Resolution**: Fixed crashes in protocol::Variant copy operations
46
- - **Move Semantics**: Efficient move constructors and assignment operators
47
- - **Buffer Optimization**: Enhanced zero-copy operations in buffer handling
48
-
49
- ## Performance Impact
50
-
51
- - **Memory Usage**: 10-20% reduction in memory fragmentation
52
- - **Message Processing**: 5-15% faster validation and processing
53
- - **Network Efficiency**: Reduced retransmissions due to better error handling
54
- - **CPU Usage**: More efficient algorithms reduce processing overhead
55
-
56
- ## Testing & Quality
57
-
58
- - **100% Test Pass Rate**: All existing and new tests pass
59
- - **New Test Suites**: Comprehensive tests for validation and metrics
60
- - **Static Analysis**: Code passes all static analysis checks
61
- - **Memory Testing**: No memory leaks detected
62
-
63
- ## Examples
64
-
65
- See `examples/alteriom/improved_sensor_node.ino` for a complete demonstration of the new features.
66
-
67
- ---
68
-
69
- For detailed API documentation and usage examples, see the individual header files.
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! 🎉