@alteriom/painlessmesh 1.8.14 → 1.9.0

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 (208) hide show
  1. package/BRIDGE_TO_INTERNET.md +229 -0
  2. package/CHANGELOG.md +89 -1
  3. package/CONTRIBUTING.md +79 -0
  4. package/README.md +70 -143
  5. package/docs/README.md +1 -0
  6. package/docs/api/shared-gateway.md +1207 -0
  7. package/docs/troubleshooting/common-issues.md +28 -0
  8. package/docs/troubleshooting/faq.md +113 -12
  9. package/examples/basic/test/simulator/CMakeLists.txt +40 -0
  10. package/examples/basic/test/simulator/README.md +149 -0
  11. package/examples/basic/test/simulator/firmware/basic_firmware.hpp +117 -0
  12. package/examples/basic/test/simulator/scenarios/basic_mesh_test.yaml +81 -0
  13. package/examples/bridge/bridge.ino +17 -4
  14. package/examples/bridge_failover/README.md +81 -0
  15. package/examples/bridge_failover/bridge_failover.ino +51 -6
  16. package/examples/sharedGateway/README.md +235 -0
  17. package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
  18. package/examples/sharedGateway/sharedGateway.ino +303 -0
  19. package/library.json +3 -22
  20. package/library.properties +1 -1
  21. package/package.json +3 -3
  22. package/src/arduino/wifi.hpp +380 -13
  23. package/src/painlessmesh/gateway.hpp +2120 -0
  24. package/src/painlessmesh/mesh.hpp +1034 -6
  25. package/src/painlessmesh/message_tracker.hpp +311 -0
  26. package/src/painlessmesh/protocol.hpp +6 -0
  27. package/DOCUMENTATION_INDEX.md +0 -146
  28. package/docs/API_DESIGN_GUIDELINES.md +0 -414
  29. package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
  30. package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
  31. package/docs/BRIDGE_FAILOVER.md +0 -512
  32. package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
  33. package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
  34. package/docs/CREATE_MISSING_RELEASES.md +0 -321
  35. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
  36. package/docs/FAQ_VERSION_NUMBERS.md +0 -152
  37. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
  38. package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
  39. package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
  40. package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
  41. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
  42. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
  43. package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
  44. package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
  45. package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
  46. package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
  47. package/docs/PHASE1_GUIDE.md +0 -349
  48. package/docs/PHASE2_GUIDE.md +0 -543
  49. package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
  50. package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
  51. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
  52. package/docs/VERSION_MANAGEMENT.md +0 -213
  53. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
  54. package/docs/archive/FEATURE_PROPOSALS.md +0 -337
  55. package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
  56. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
  57. package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
  58. package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
  59. package/docs/archive/RELEASE_SUMMARY.md +0 -173
  60. package/docs/archive/SCONS_BUILD_FIX.md +0 -313
  61. package/docs/archive/TRIGGER_RELEASE.md +0 -280
  62. package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
  63. package/docs/archive/ota-and-status-enhancements.md +0 -911
  64. package/docs/archive/ota-status-architecture-diagrams.md +0 -658
  65. package/docs/archive/ota-status-quick-reference.md +0 -284
  66. package/docs/design/.gitkeep +0 -1
  67. package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
  68. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
  69. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
  70. package/docs/development/DOCKER_TESTING.md +0 -196
  71. package/docs/development/PLATFORMIO_USAGE.md +0 -180
  72. package/docs/development/TESTING_SUMMARY.md +0 -126
  73. package/docs/development/contributing.md +0 -301
  74. package/docs/development/documentation.md +0 -583
  75. package/docs/features/DIAGNOSTICS_API.md +0 -534
  76. package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
  77. package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
  78. package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
  79. package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
  80. package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
  81. package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
  82. package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
  83. package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
  84. package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
  85. package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
  86. package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
  87. package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
  88. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
  89. package/docs/improvements/README.md +0 -212
  90. package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
  91. package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
  92. package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
  93. package/docs/internal/ISSUE_66_STATUS.md +0 -316
  94. package/docs/internal/PR_SUMMARY.md +0 -315
  95. package/docs/internal/REVIEW_SUMMARY.md +0 -332
  96. package/docs/multi-bridge-setup.md +0 -1025
  97. package/docs/platformio-publishing.md +0 -255
  98. package/docs/platformio-setup-summary.md +0 -121
  99. package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
  100. package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
  101. package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
  102. package/docs/releases/FEATURE_HISTORY.md +0 -543
  103. package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
  104. package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
  105. package/docs/releases/PATCH_v1.7.2.md +0 -262
  106. package/docs/releases/PATCH_v1.7.3.md +0 -262
  107. package/docs/releases/PATCH_v1.7.4.md +0 -219
  108. package/docs/releases/PHASE1_SUMMARY.md +0 -246
  109. package/docs/releases/PHASE2_SUMMARY.md +0 -499
  110. package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
  111. package/docs/releases/QUICK_START_RELEASES.md +0 -113
  112. package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
  113. package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
  114. package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
  115. package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
  116. package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
  117. package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
  118. package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
  119. package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
  120. package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
  121. package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
  122. package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
  123. package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
  124. package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
  125. package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
  126. package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
  127. package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
  128. package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
  129. package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
  130. package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
  131. package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
  132. package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
  133. package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
  134. package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
  135. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
  136. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
  137. package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
  138. package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
  139. package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
  140. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
  141. package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
  142. package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
  143. package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
  144. package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
  145. package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
  146. package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
  147. package/docs/troubleshooting/station-reconnection-issues.md +0 -172
  148. package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
  149. package/docs/wiki/API-Reference.md +0 -246
  150. package/docs/wiki/Complete-Documentation.md +0 -123
  151. package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
  152. package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
  153. package/examples/alteriomImproved/platformio.ini +0 -32
  154. package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
  155. package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
  156. package/examples/alteriomMetricsHealth/platformio.ini +0 -26
  157. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
  158. package/examples/alteriomPhase1/phase1_features.ino +0 -242
  159. package/examples/alteriomPhase1/platformio.ini +0 -26
  160. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
  161. package/examples/alteriomPhase2/phase2_features.ino +0 -186
  162. package/examples/alteriomPhase2/platformio.ini +0 -26
  163. package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
  164. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
  165. package/examples/alteriomSensorNode/platformio.ini +0 -26
  166. package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
  167. package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
  168. package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
  169. package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
  170. package/examples/bridge/mesh_event_publisher.hpp +0 -253
  171. package/examples/bridge/mesh_topology_reporter.hpp +0 -303
  172. package/examples/bridge/mqtt_command_bridge.hpp +0 -459
  173. package/examples/bridge/mqtt_status_bridge.hpp +0 -519
  174. package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
  175. package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
  176. package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
  177. package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
  178. package/examples/diagnosticsExample/platformio.ini +0 -26
  179. package/examples/echoNode/echoNode.ino +0 -33
  180. package/examples/echoNode/platformio.ini +0 -26
  181. package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
  182. package/examples/meshCommandNode/meshCommandNode.ino +0 -265
  183. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
  184. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
  185. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
  186. package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
  187. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
  188. package/examples/mqttCommandBridge/platformio.ini +0 -27
  189. package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
  190. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
  191. package/examples/mqttStatusBridge/platformio.ini +0 -27
  192. package/examples/mqttTopologyTest/README.md +0 -467
  193. package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
  194. package/examples/mqttTopologyTest/platformio.ini +0 -27
  195. package/examples/multi_bridge/README.md +0 -346
  196. package/examples/multi_bridge/primary_bridge.ino +0 -96
  197. package/examples/multi_bridge/regular_node.ino +0 -141
  198. package/examples/multi_bridge/secondary_bridge.ino +0 -111
  199. package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
  200. package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
  201. package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
  202. package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
  203. package/examples/queued_alarms/README.md +0 -390
  204. package/examples/queued_alarms/queued_alarms.ino +0 -265
  205. package/examples/routing_demo/README.md +0 -172
  206. package/examples/routing_demo/routing_demo.ino +0 -102
  207. package/examples/rtcIntegration/README.md +0 -294
  208. package/examples/rtcIntegration/rtcIntegration.ino +0 -210
@@ -1,331 +0,0 @@
1
- # Arduino Library Manager Submission Guide
2
-
3
- ## Overview
4
-
5
- This document explains the Arduino Library Manager indexing issue and provides the solution to restore automatic version updates.
6
-
7
- ## Current Status
8
-
9
- **Status**: ✅ **Already registered** in Arduino Library Manager
10
- **Issue**: New releases (v1.7.0 - v1.8.2) not being indexed
11
- **Last Indexed Version**: 1.6.1
12
- **Repository**: https://github.com/Alteriom/painlessMesh
13
-
14
- ## Problem Statement
15
-
16
- Users report that the Arduino IDE:
17
- - Shows old version (1.6.1) instead of current version (1.8.2)
18
- - Does not detect new releases (v1.7.0 through v1.8.2)
19
- - Cannot update to newer versions via Library Manager
20
- - Has issues when trying to add the library as a ZIP file
21
-
22
- ## Root Cause **[RESOLVED]**
23
-
24
- The library name in `library.properties` was changed between v1.6.1 and v1.7.0:
25
-
26
- - **v1.6.1**: `name=Alteriom PainlessMesh` (with space)
27
- - **v1.7.0+**: `name=AlteriomPainlessMesh` (no space)
28
-
29
- **Arduino Library Manager requires the library name to remain consistent.** When the name changed, the indexer treated it as a completely different library and stopped indexing new releases under the original name.
30
-
31
- The library IS registered at: https://github.com/arduino/library-registry (entry: `https://github.com/Alteriom/painlessMesh`)
32
-
33
- ## Solution **[IMPLEMENTED]**
34
-
35
- Revert the library name in `library.properties` back to the original format with a space:
36
-
37
- ```properties
38
- name=Alteriom PainlessMesh
39
- ```
40
-
41
- This will allow Arduino Library Manager to resume indexing new releases as updates to the existing library entry.
42
-
43
- ## Solution: Submit to Arduino Library Registry
44
-
45
- ### Prerequisites Check ✅
46
-
47
- Before submission, verify that the library meets all Arduino Library Manager requirements.
48
-
49
- **Automated Validation**:
50
-
51
- Run the validation script to check all requirements:
52
-
53
- ```bash
54
- ./scripts/validate-arduino-compliance.sh
55
- ```
56
-
57
- This script verifies:
58
-
59
- - ✅ **library.properties file**: Present and properly formatted
60
- - ✅ **Version field**: Set to 1.8.2
61
- - ✅ **src/ directory**: Contains all library source code
62
- - ✅ **examples/ directory**: Contains working example sketches (29+ examples)
63
- - ✅ **Valid license**: LGPL-3.0 (open source)
64
- - ✅ **README.md**: Comprehensive documentation
65
- - ✅ **Git tags**: Releases are properly tagged (v1.8.2, etc.)
66
- - ✅ **GitHub repository**: Public and accessible
67
- - ✅ **Library name**: Unique (AlteriomPainlessMesh)
68
- - ✅ **Version consistency**: All package files have matching versions
69
- - ✅ **Header files**: Present in src/ directory
70
- - ✅ **keywords.txt**: Present (optional but recommended)
71
-
72
- **Current Status**: ✅ All checks passing
73
-
74
- ### library.properties Validation
75
-
76
- Current library.properties contents:
77
-
78
- ```properties
79
- name=AlteriomPainlessMesh
80
- version=1.8.2
81
- author=Coopdis,Scotty Franzyshen,Edwin van Leeuwen,Germán Martín,Maximilian Schwarz,Doanh Doanh,Alteriom
82
- maintainer=Alteriom
83
- sentence=A painless way to setup a mesh with ESP8266 and ESP32 devices with Alteriom extensions
84
- paragraph=painlessMesh is a user-friendly library for creating mesh networks with ESP8266 and ESP32 devices. This Alteriom fork includes additional packages for sensor data (SensorPackage), device commands (CommandPackage), and status monitoring (StatusPackage). It handles routing and network management automatically, so you can focus on your application. The library uses JSON-based messaging and syncs time across all nodes, making it ideal for coordinated behaviour like synchronized light displays or sensor networks reporting to a central node.
85
- category=Communication
86
- url=https://github.com/Alteriom/painlessMesh
87
- architectures=esp8266,esp32
88
- includes=painlessMesh.h
89
- depends=ArduinoJson, TaskScheduler
90
- ```
91
-
92
- **Status**: ✅ All required fields present and properly formatted
93
-
94
- ### Submission Process
95
-
96
- #### Step 1: Prepare Submission Information
97
-
98
- Gather the following information for the submission:
99
-
100
- ```
101
- Repository URL: https://github.com/Alteriom/painlessMesh
102
- Library Name: AlteriomPainlessMesh
103
- Current Version: 1.8.2
104
- Latest Release Tag: v1.8.2
105
- Category: Communication
106
- Architectures: ESP8266, ESP32
107
- Dependencies: ArduinoJson, TaskScheduler
108
- License: LGPL-3.0
109
- ```
110
-
111
- #### Step 2: Create Submission Issue
112
-
113
- 1. Go to: https://github.com/arduino/library-registry
114
- 2. Click on "Issues" tab
115
- 3. Click "New Issue"
116
- 4. Use the template below:
117
-
118
- ```markdown
119
- ## Add AlteriomPainlessMesh to Arduino Library Manager
120
-
121
- **Repository URL**: https://github.com/Alteriom/painlessMesh
122
-
123
- **Library Name**: AlteriomPainlessMesh
124
-
125
- **Current Version**: 1.8.2
126
-
127
- **Release Tag**: v1.8.2
128
-
129
- **Description**:
130
- AlteriomPainlessMesh is a user-friendly library for creating mesh networks with ESP8266 and ESP32 devices. This is an enhanced fork of the original painlessMesh library with additional features:
131
-
132
- - **SensorPackage** (Type 200): Environmental data collection with temperature, humidity, pressure monitoring
133
- - **StatusPackage** (Type 202): Device health monitoring with memory, uptime, and WiFi metrics
134
- - **CommandPackage** (Type 400): Remote device control and automation
135
- - **MetricsPackage** (Type 204): Comprehensive performance metrics for dashboards
136
- - **HealthCheckPackage** (Type 605): Proactive problem detection and predictive maintenance
137
- - **Bridge Coordination** (Type 613): Multi-bridge support for high availability
138
- - **Message Queue**: Offline message queuing for critical sensor data
139
-
140
- The library handles mesh routing and network management automatically, uses JSON-based messaging, and syncs time across all nodes. Ideal for IoT sensor networks, smart agriculture, home automation, and industrial monitoring.
141
-
142
- **Category**: Communication
143
-
144
- **Architectures**: esp8266, esp32
145
-
146
- **Dependencies**:
147
- - ArduinoJson (^7.4.2)
148
- - TaskScheduler (^4.0.0)
149
-
150
- **License**: LGPL-3.0
151
-
152
- **Documentation**: https://alteriom.github.io/painlessMesh/
153
-
154
- **Maintainer**: Alteriom (https://github.com/Alteriom)
155
-
156
- **Additional Information**:
157
- - Comprehensive CI/CD with automated testing
158
- - 19+ working examples included
159
- - 710+ unit tests passing
160
- - Active maintenance and regular releases
161
- - PlatformIO Registry: https://registry.platformio.org/libraries/sparck75/AlteriomPainlessMesh
162
- - NPM Package: https://www.npmjs.com/package/@alteriom/painlessmesh
163
-
164
- This library is ready for Arduino Library Manager indexing. All requirements are met:
165
- - ✅ Valid library.properties file
166
- - ✅ Proper directory structure (src/, examples/)
167
- - ✅ Semantic versioning with git tags
168
- - ✅ Open source license
169
- - ✅ Examples compile successfully
170
- - ✅ Comprehensive documentation
171
- ```
172
-
173
- #### Step 3: Wait for Review
174
-
175
- The Arduino team will review the submission:
176
-
177
- 1. **Automated checks**: The Arduino bot will validate the repository structure
178
- 2. **Manual review**: Arduino team will verify library quality
179
- 3. **Approval**: If everything is correct, the library will be added to `repositories.txt`
180
- 4. **Indexing**: The Arduino Library Manager will start indexing new releases
181
-
182
- **Expected Timeline**: 1-2 weeks (can be longer depending on queue)
183
-
184
- #### Step 4: Verify Registration
185
-
186
- Once approved, verify the library is accessible:
187
-
188
- 1. Open Arduino IDE
189
- 2. Go to: Sketch → Include Library → Manage Libraries
190
- 3. Search for "AlteriomPainlessMesh"
191
- 4. Verify version 1.8.2 (or latest) appears
192
- 5. Test installation
193
-
194
- ### Alternative: Direct Pull Request (Advanced)
195
-
196
- If you prefer to submit via pull request:
197
-
198
- 1. Fork: https://github.com/arduino/library-registry
199
- 2. Edit `repositories.txt`
200
- 3. Add line: `https://github.com/Alteriom/painlessMesh`
201
- 4. Create pull request with description
202
- 5. Wait for review and merge
203
-
204
- **Note**: The issue submission method is recommended for first-time submissions.
205
-
206
- ## Post-Registration
207
-
208
- ### Automatic Updates
209
-
210
- Once registered, future releases will be automatically indexed:
211
-
212
- 1. Create new release on GitHub with semantic version tag (e.g., v1.8.3)
213
- 2. Update `library.properties`, `library.json`, `package.json` versions
214
- 3. Arduino Library Manager automatically detects new releases
215
- 4. Users can update via Library Manager
216
-
217
- **Update Frequency**: Arduino Library Manager checks for updates every 24-48 hours
218
-
219
- ### Maintenance
220
-
221
- To ensure continued compatibility:
222
-
223
- - Keep `library.properties` version in sync with git tags
224
- - Follow semantic versioning (MAJOR.MINOR.PATCH)
225
- - Test examples before each release
226
- - Update CHANGELOG.md with changes
227
- - Maintain backward compatibility when possible
228
-
229
- ## Testing Library Manager Installation
230
-
231
- Once registered, test the installation process:
232
-
233
- ### Test 1: Fresh Installation
234
-
235
- ```
236
- 1. Open Arduino IDE
237
- 2. Sketch → Include Library → Manage Libraries
238
- 3. Search: "AlteriomPainlessMesh"
239
- 4. Click "Install"
240
- 5. Verify installation completes
241
- 6. Check: Tools → Manage Libraries → Installed
242
- ```
243
-
244
- ### Test 2: Example Compilation
245
-
246
- ```
247
- 1. File → Examples → AlteriomPainlessMesh → basic
248
- 2. Select board: ESP32 Dev Module or ESP8266 board
249
- 3. Verify/Compile sketch
250
- 4. Confirm compilation succeeds
251
- ```
252
-
253
- ### Test 3: Update Detection
254
-
255
- ```
256
- 1. Release new version (e.g., v1.8.3)
257
- 2. Wait 24-48 hours for indexing
258
- 3. Open Library Manager
259
- 4. Search: "AlteriomPainlessMesh"
260
- 5. Verify "Update" button appears
261
- 6. Click Update and verify installation
262
- ```
263
-
264
- ## Troubleshooting
265
-
266
- ### Library Not Appearing in Manager
267
-
268
- **Cause**: Not yet indexed or submission not approved
269
- **Solution**:
270
- - Check submission issue status
271
- - Wait 24-48 hours after approval
272
- - Verify `library.properties` has correct format
273
-
274
- ### Version Not Updating
275
-
276
- **Cause**: Git tag doesn't match library.properties version
277
- **Solution**:
278
- - Ensure version in library.properties matches git tag
279
- - Example: library.properties has `version=1.8.2` → git tag must be `v1.8.2`
280
- - Push corrected tag to GitHub
281
-
282
- ### Compilation Errors in Library Manager
283
-
284
- **Cause**: Missing dependencies or platform-specific issues
285
- **Solution**:
286
- - Verify `depends=` field in library.properties lists all dependencies
287
- - Test compilation on target platforms before release
288
- - Check Arduino forum for reported issues
289
-
290
- ### Old Version Showing (1.6.1 Issue)
291
-
292
- **Cause**: Library not properly registered or name conflict
293
- **Solution**:
294
- - Complete Arduino Library Manager registration
295
- - Verify library name is unique
296
- - Check if old library version exists under different name
297
-
298
- ## Reference Links
299
-
300
- - **Arduino Library Manager**: https://www.arduino.cc/reference/en/libraries/
301
- - **Library Registry**: https://github.com/arduino/library-registry
302
- - **Submission Guide**: https://support.arduino.cc/hc/en-us/articles/360012175419
303
- - **Library Specification**: https://arduino.github.io/arduino-cli/latest/library-specification/
304
- - **Library Manager FAQ**: https://support.arduino.cc/hc/en-us/articles/360016077340
305
-
306
- ## Support
307
-
308
- If you encounter issues with the Arduino Library Manager submission:
309
-
310
- 1. **Check Documentation**: Review Arduino's official library submission guide
311
- 2. **Search Issues**: Look for similar submissions in arduino/library-registry issues
312
- 3. **Ask Arduino Forum**: Post questions in Arduino's library development forum
313
- 4. **Contact Maintainer**: Open issue in this repository for help
314
-
315
- ## Summary
316
-
317
- **Action Required**: Submit the library to Arduino Library Manager registry
318
-
319
- **Method**: Create issue at https://github.com/arduino/library-registry
320
-
321
- **Expected Result**: Library becomes installable via Arduino IDE's Library Manager
322
-
323
- **Timeline**: 1-2 weeks for review and approval
324
-
325
- **Maintenance**: Future releases automatically indexed every 24-48 hours
326
-
327
- Once registered, users will be able to:
328
- - ✅ Search for "AlteriomPainlessMesh" in Arduino IDE
329
- - ✅ Install with one click
330
- - ✅ Update to latest versions automatically
331
- - ✅ Access library documentation and examples
@@ -1,235 +0,0 @@
1
- # Boolean Field Naming Convention
2
-
3
- **Related Issue**: #27
4
-
5
- ## Overview
6
-
7
- This document establishes the standard naming conventions for boolean fields in Alteriom packages, particularly in `StatusPackage`. Consistent naming patterns make the code self-documenting and help developers understand field semantics at a glance.
8
-
9
- ## Three Naming Patterns
10
-
11
- ### Pattern 1: `*Set` Suffix
12
-
13
- **Purpose**: Indicates that required configuration data has been provided (typically for sensitive data like passwords or secrets).
14
-
15
- **When to use**:
16
- - Field represents whether configuration data exists
17
- - Typically used for passwords, secrets, API keys, server URLs
18
- - Does NOT indicate if the feature is active or working
19
-
20
- **Examples**:
21
- ```cpp
22
- bool deviceSecretSet = false; // Has device secret been configured?
23
- bool wifiPasswordSet = false; // Has WiFi password been provided?
24
- bool meshPasswordSet = false; // Has mesh password been provided?
25
- bool otaServerSet = false; // Has OTA server URL been configured?
26
- bool mqttBrokerSet = false; // Has MQTT broker been configured?
27
- ```
28
-
29
- **Semantic meaning**:
30
- - `true` = Configuration data has been provided
31
- - `false` = Configuration data is missing or not yet provided
32
- - Does NOT indicate the feature is enabled or currently working
33
-
34
- ### Pattern 2: `*Enabled` Suffix
35
-
36
- **Purpose**: Indicates that a feature is currently active or turned on.
37
-
38
- **When to use**:
39
- - Field represents a feature toggle (on/off)
40
- - User or system can enable/disable the feature
41
- - Feature state is controllable and intentional
42
-
43
- **Examples**:
44
- ```cpp
45
- bool displayEnabled = false; // Is display feature enabled?
46
- bool deepSleepEnabled = false; // Is deep sleep mode enabled?
47
- bool mqttHourlyRetryEnabled = false; // Is hourly retry feature enabled?
48
- bool otaEnabled = false; // Are OTA updates enabled?
49
- bool encryptionEnabled = false; // Is data encryption enabled?
50
- bool encodingEnabled = false; // Is data encoding enabled?
51
- bool logTimestampEnabled = false; // Are log timestamps enabled?
52
- ```
53
-
54
- **Semantic meaning**:
55
- - `true` = Feature is currently active/turned on
56
- - `false` = Feature is currently inactive/turned off
57
- - Independent of whether required configuration exists
58
-
59
- ### Pattern 3: Runtime State (`is*` Prefix or `*Connected`)
60
-
61
- **Purpose**: Indicates current runtime status or operational state (not configuration).
62
-
63
- **When to use**:
64
- - Field represents current operational status
65
- - Status changes at runtime based on system behavior
66
- - Not directly controlled by configuration
67
-
68
- **Examples**:
69
- ```cpp
70
- bool isConfigured = false; // Has device completed configuration?
71
- bool mqttConnected = false; // Currently connected to MQTT broker?
72
- bool meshIsRoot = false; // Is this node currently the mesh root?
73
- bool isOnline = false; // Is device currently online?
74
- bool wifiConnected = false; // Currently connected to WiFi?
75
- ```
76
-
77
- **Semantic meaning**:
78
- - `true` = Currently in this state
79
- - `false` = Not currently in this state
80
- - Reflects actual runtime conditions, not configuration
81
-
82
- ## Combining Patterns
83
-
84
- A feature may legitimately have multiple boolean fields using different patterns:
85
-
86
- ### Example: OTA (Over-The-Air) Updates
87
-
88
- ```cpp
89
- bool otaServerSet = false; // Has OTA server URL been configured? (*Set)
90
- bool otaEnabled = false; // Are OTA updates enabled? (*Enabled)
91
- bool otaInProgress = false; // Is an OTA update currently running? (is* / runtime state)
92
- ```
93
-
94
- **Valid states**:
95
- - `otaServerSet=true, otaEnabled=false` → Server configured but feature disabled
96
- - `otaServerSet=false, otaEnabled=true` → Feature enabled but no server (invalid/warning state)
97
- - `otaServerSet=true, otaEnabled=true` → Fully configured and active
98
- - `otaServerSet=true, otaEnabled=true, otaInProgress=true` → Update in progress
99
-
100
- ### Example: MQTT Connection
101
-
102
- ```cpp
103
- bool mqttBrokerSet = false; // Has MQTT broker been configured? (*Set)
104
- bool mqttEnabled = false; // Is MQTT feature enabled? (*Enabled)
105
- bool mqttConnected = false; // Currently connected to broker? (runtime state)
106
- ```
107
-
108
- ## Current StatusPackage Implementation
109
-
110
- ### Existing `*Set` Fields (Build 8057)
111
- ```cpp
112
- bool deviceSecretSet = false; // Whether device secret is configured
113
- ```
114
-
115
- **Potential additions** (if needed):
116
- ```cpp
117
- bool wifiPasswordSet = false; // Whether WiFi password is configured
118
- bool meshPasswordSet = false; // Whether mesh password is configured
119
- bool mqttBrokerSet = false; // Whether MQTT broker is configured
120
- bool otaServerSet = false; // Whether OTA server URL is configured
121
- ```
122
-
123
- ### Existing `*Enabled` Fields
124
- ```cpp
125
- bool displayEnabled = false; // Display feature enabled
126
- bool deepSleepEnabled = false; // Deep sleep feature enabled
127
- bool mqttHourlyRetryEnabled = false; // Hourly retry feature enabled
128
- ```
129
-
130
- **Potential additions** (if needed):
131
- ```cpp
132
- bool meshEnabled = false; // Is WiFi mesh feature enabled?
133
- bool otaEnabled = false; // Are OTA updates enabled?
134
- bool encryptionEnabled = false; // Is encryption enabled?
135
- bool encodingEnabled = false; // Is data encoding enabled?
136
- ```
137
-
138
- ### Potential Runtime State Fields
139
- Currently, StatusPackage does not have explicit runtime state fields. If needed in the future:
140
-
141
- ```cpp
142
- bool isConfigured = false; // Device has complete valid configuration
143
- bool mqttConnected = false; // Currently connected to MQTT broker
144
- bool meshIsRoot = false; // Currently acting as mesh root
145
- bool wifiConnected = false; // Currently connected to WiFi
146
- ```
147
-
148
- ## Best Practices
149
-
150
- ### DO ✅
151
-
152
- 1. **Use `*Set` for configuration presence**
153
- ```cpp
154
- bool deviceSecretSet = false; // ✅ Indicates if secret is configured
155
- ```
156
-
157
- 2. **Use `*Enabled` for feature toggles**
158
- ```cpp
159
- bool displayEnabled = false; // ✅ Indicates if feature is on/off
160
- ```
161
-
162
- 3. **Use `is*` or `*Connected` for runtime state**
163
- ```cpp
164
- bool isConfigured = false; // ✅ Indicates current state
165
- bool mqttConnected = false; // ✅ Indicates connection status
166
- ```
167
-
168
- 4. **Document field purpose clearly**
169
- ```cpp
170
- bool otaServerSet = false; // Has OTA server URL been configured? (Build XXXX)
171
- ```
172
-
173
- ### DON'T ❌
174
-
175
- 1. **Don't mix patterns without clear semantics**
176
- ```cpp
177
- bool wifiSet = false; // ❌ Ambiguous - set to what? On/off or configured?
178
- ```
179
-
180
- 2. **Don't use generic boolean names**
181
- ```cpp
182
- bool wifi = false; // ❌ Unclear meaning
183
- bool display = false; // ❌ What about display?
184
- ```
185
-
186
- 3. **Don't use `*Set` for feature toggles**
187
- ```cpp
188
- bool displaySet = false; // ❌ Confusing - use displayEnabled instead
189
- ```
190
-
191
- 4. **Don't use `*Enabled` for configuration presence**
192
- ```cpp
193
- bool deviceSecretEnabled = false; // ❌ Confusing - use deviceSecretSet instead
194
- ```
195
-
196
- ## Validation
197
-
198
- When adding new boolean fields, ask these questions:
199
-
200
- 1. **Does this field indicate configuration presence?**
201
- - YES → Use `*Set` suffix
202
- - Example: `mqttBrokerSet`, `deviceSecretSet`
203
-
204
- 2. **Does this field toggle a feature on/off?**
205
- - YES → Use `*Enabled` suffix
206
- - Example: `displayEnabled`, `otaEnabled`
207
-
208
- 3. **Does this field reflect current runtime state?**
209
- - YES → Use `is*` prefix or `*Connected` suffix
210
- - Example: `isConfigured`, `mqttConnected`
211
-
212
- 4. **Does this field fit multiple categories?**
213
- - Consider creating separate fields for each semantic meaning
214
- - Example: `otaServerSet` AND `otaEnabled` AND `otaInProgress`
215
-
216
- ## Benefits
217
-
218
- 1. **Self-Documenting Code**: Field names clearly indicate semantic meaning
219
- 2. **Reduced Confusion**: Developers immediately understand what each boolean represents
220
- 3. **Better API Design**: Consistent patterns across entire codebase
221
- 4. **Easier Onboarding**: New developers can infer meaning from field names
222
- 5. **Fewer Bugs**: Clear semantics reduce misunderstandings and implementation errors
223
-
224
- ## References
225
-
226
- - StatusPackage implementation: `examples/alteriom/alteriom_sensor_package.hpp`
227
- - Test validation: `test/catch/catch_alteriom_packages.cpp`
228
- - Time field conventions: See header documentation in `alteriom_sensor_package.hpp`
229
-
230
- ---
231
-
232
- **Document Version**: 1.0
233
- **Last Updated**: 2025-11-04
234
- **Status**: Active
235
- **Applies To**: StatusPackage, EnhancedStatusPackage, and all future Alteriom packages