@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.
Files changed (129) hide show
  1. package/CHANGELOG.md +380 -143
  2. package/LICENSE +674 -674
  3. package/README.md +477 -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 +77 -70
  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/getting-started/first-mesh.md +409 -409
  25. package/docs/getting-started/installation.md +274 -274
  26. package/docs/getting-started/quickstart.md +157 -157
  27. package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
  28. package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/improvements/README.md +86 -68
  31. package/docs/improvements/ota-and-status-enhancements.md +911 -0
  32. package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
  33. package/docs/improvements/ota-status-quick-reference.md +284 -0
  34. package/docs/platformio-publishing.md +255 -0
  35. package/docs/platformio-setup-summary.md +121 -0
  36. package/docs/troubleshooting/common-issues.md +520 -520
  37. package/docs/troubleshooting/faq.md +472 -472
  38. package/docs/tutorials/basic-examples.md +717 -717
  39. package/docs/wiki/API-Reference.md +245 -245
  40. package/docs/wiki/Complete-Documentation.md +122 -122
  41. package/examples/alteriom/README.md +139 -81
  42. package/examples/alteriom/alteriom.ino +186 -185
  43. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  44. package/examples/alteriom/platformio.ini +24 -24
  45. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  46. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  47. package/examples/alteriomImproved/platformio.ini +25 -0
  48. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  49. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  50. package/examples/alteriomPhase1/platformio.ini +25 -0
  51. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  52. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  53. package/examples/alteriomPhase2/platformio.ini +25 -0
  54. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  55. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  56. package/examples/alteriomSensorNode/platformio.ini +25 -0
  57. package/examples/basic/basic.ino +66 -66
  58. package/examples/basic/platformio.ini +25 -25
  59. package/examples/bridge/bridge.ino +51 -51
  60. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  61. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  62. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  63. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  64. package/examples/bridge/platformio.ini +25 -25
  65. package/examples/echoNode/echoNode.ino +33 -33
  66. package/examples/echoNode/platformio.ini +25 -25
  67. package/examples/logClient/logClient.ino +109 -109
  68. package/examples/logClient/platformio.ini +25 -25
  69. package/examples/logServer/logServer.ino +81 -81
  70. package/examples/logServer/platformio.ini +25 -25
  71. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  72. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  73. package/examples/meshCommandNode/platformio.ini +25 -0
  74. package/examples/mqttBridge/mqttBridge.ino +118 -118
  75. package/examples/mqttBridge/platformio.ini +26 -26
  76. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  77. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  78. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  79. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  80. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  81. package/examples/mqttCommandBridge/platformio.ini +26 -0
  82. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  83. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  84. package/examples/mqttStatusBridge/platformio.ini +26 -0
  85. package/examples/mqttTopologyTest/README.md +467 -0
  86. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  87. package/examples/mqttTopologyTest/platformio.ini +26 -0
  88. package/examples/namedMesh/namedMesh.ino +97 -97
  89. package/examples/namedMesh/platformio.ini +25 -25
  90. package/examples/otaReceiver/otaReceiver.ino +79 -79
  91. package/examples/otaReceiver/platformio.ini +25 -25
  92. package/examples/otaSender/otaSender.ino +160 -151
  93. package/examples/otaSender/platformio.ini +25 -25
  94. package/examples/startHere/platformio.ini +25 -25
  95. package/examples/startHere/startHere.ino +159 -159
  96. package/examples/webServer/platformio.ini +27 -27
  97. package/examples/webServer/webServer.ino +89 -89
  98. package/keywords.txt +48 -48
  99. package/library.json +55 -34
  100. package/library.properties +10 -10
  101. package/package.json +86 -78
  102. package/src/AlteriomPainlessMesh.h +97 -97
  103. package/src/arduino/wifi.hpp +365 -365
  104. package/src/boost/asynctcp.hpp +279 -279
  105. package/src/painlessMesh.h +70 -70
  106. package/src/painlessMeshSTA.cpp +236 -236
  107. package/src/painlessMeshSTA.h +58 -58
  108. package/src/painlessTaskOptions.h +4 -4
  109. package/src/painlessmesh/base64.hpp +111 -111
  110. package/src/painlessmesh/buffer.hpp +229 -229
  111. package/src/painlessmesh/callback.hpp +91 -91
  112. package/src/painlessmesh/configuration.hpp +77 -77
  113. package/src/painlessmesh/connection.hpp +192 -192
  114. package/src/painlessmesh/layout.hpp +188 -188
  115. package/src/painlessmesh/logger.hpp +158 -158
  116. package/src/painlessmesh/memory.hpp +119 -119
  117. package/src/painlessmesh/mesh.hpp +761 -560
  118. package/src/painlessmesh/metrics.hpp +322 -322
  119. package/src/painlessmesh/ntp.hpp +263 -263
  120. package/src/painlessmesh/ota.hpp +582 -553
  121. package/src/painlessmesh/plugin.hpp +188 -188
  122. package/src/painlessmesh/protocol.hpp +813 -813
  123. package/src/painlessmesh/router.hpp +322 -322
  124. package/src/painlessmesh/tcp.hpp +71 -71
  125. package/src/painlessmesh/validation.hpp +238 -238
  126. package/src/plugin/performance.hpp +214 -214
  127. package/src/plugin/remote.hpp +64 -64
  128. package/src/scheduler.cpp +10 -10
  129. 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! 🎉