@alteriom/painlessmesh 1.8.15 → 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.
- package/BRIDGE_TO_INTERNET.md +229 -0
- package/CHANGELOG.md +61 -1
- package/CONTRIBUTING.md +79 -0
- package/README.md +69 -144
- package/docs/README.md +1 -0
- package/docs/api/shared-gateway.md +1207 -0
- package/examples/bridge_failover/README.md +81 -0
- package/examples/bridge_failover/bridge_failover.ino +35 -4
- package/examples/sharedGateway/README.md +235 -0
- package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
- package/examples/sharedGateway/sharedGateway.ino +303 -0
- package/library.json +3 -22
- package/library.properties +1 -1
- package/package.json +3 -6
- package/src/arduino/wifi.hpp +342 -4
- package/src/painlessmesh/gateway.hpp +2120 -0
- package/src/painlessmesh/mesh.hpp +1034 -6
- package/src/painlessmesh/message_tracker.hpp +311 -0
- package/src/painlessmesh/protocol.hpp +6 -0
- package/DOCUMENTATION_INDEX.md +0 -146
- package/RELEASE_NOTES_1.8.15.md +0 -160
- package/RELEASE_READINESS_PLAN.md +0 -323
- package/TESTING_WITH_SIMULATOR.md +0 -259
- package/docs/API_DESIGN_GUIDELINES.md +0 -414
- package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
- package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
- package/docs/BRIDGE_FAILOVER.md +0 -512
- package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
- package/docs/BRIDGE_INITIALIZATION_FALLBACK.md +0 -357
- package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
- package/docs/CREATE_MISSING_RELEASES.md +0 -321
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
- package/docs/FAQ_VERSION_NUMBERS.md +0 -152
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
- package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
- package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
- package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
- package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
- package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
- package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
- package/docs/PHASE1_GUIDE.md +0 -349
- package/docs/PHASE2_GUIDE.md +0 -543
- package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
- package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
- package/docs/SIMULATOR_TESTING.md +0 -408
- package/docs/VERSION_MANAGEMENT.md +0 -213
- package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
- package/docs/archive/FEATURE_PROPOSALS.md +0 -337
- package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
- package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
- package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
- package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
- package/docs/archive/RELEASE_SUMMARY.md +0 -173
- package/docs/archive/SCONS_BUILD_FIX.md +0 -313
- package/docs/archive/TRIGGER_RELEASE.md +0 -280
- package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
- package/docs/archive/ota-and-status-enhancements.md +0 -911
- package/docs/archive/ota-status-architecture-diagrams.md +0 -658
- package/docs/archive/ota-status-quick-reference.md +0 -284
- package/docs/design/.gitkeep +0 -1
- package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
- package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
- package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
- package/docs/development/DOCKER_TESTING.md +0 -196
- package/docs/development/PLATFORMIO_USAGE.md +0 -180
- package/docs/development/TESTING_SUMMARY.md +0 -126
- package/docs/development/contributing.md +0 -301
- package/docs/development/documentation.md +0 -583
- package/docs/features/DIAGNOSTICS_API.md +0 -534
- package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
- package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
- package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
- package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
- package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
- package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
- package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
- package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
- package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
- package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
- package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
- package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
- package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
- package/docs/improvements/README.md +0 -212
- package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
- package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
- package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
- package/docs/internal/ISSUE_66_STATUS.md +0 -316
- package/docs/internal/PR_SUMMARY.md +0 -315
- package/docs/internal/REVIEW_SUMMARY.md +0 -332
- package/docs/multi-bridge-setup.md +0 -1025
- package/docs/platformio-publishing.md +0 -255
- package/docs/platformio-setup-summary.md +0 -121
- package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
- package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
- package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
- package/docs/releases/FEATURE_HISTORY.md +0 -543
- package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
- package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
- package/docs/releases/PATCH_v1.7.2.md +0 -262
- package/docs/releases/PATCH_v1.7.3.md +0 -262
- package/docs/releases/PATCH_v1.7.4.md +0 -219
- package/docs/releases/PHASE1_SUMMARY.md +0 -246
- package/docs/releases/PHASE2_SUMMARY.md +0 -499
- package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
- package/docs/releases/QUICK_START_RELEASES.md +0 -113
- package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
- package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
- package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
- package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
- package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
- package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
- package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
- package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
- package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
- package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
- package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
- package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
- package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
- package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
- package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
- package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
- package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
- package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
- package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
- package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
- package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
- package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
- package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
- package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
- package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
- package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
- package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
- package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
- package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
- package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
- package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
- package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
- package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
- package/docs/troubleshooting/common-architecture-mistakes.md +0 -438
- package/docs/troubleshooting/internet-access-faq.md +0 -299
- package/docs/troubleshooting/station-reconnection-issues.md +0 -172
- package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
- package/docs/wiki/API-Reference.md +0 -246
- package/docs/wiki/Complete-Documentation.md +0 -123
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
- package/examples/alteriomImproved/platformio.ini +0 -32
- package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
- package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
- package/examples/alteriomMetricsHealth/platformio.ini +0 -26
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase1/phase1_features.ino +0 -242
- package/examples/alteriomPhase1/platformio.ini +0 -26
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase2/phase2_features.ino +0 -186
- package/examples/alteriomPhase2/platformio.ini +0 -26
- package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/alteriomSensorNode/platformio.ini +0 -26
- package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
- package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
- package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
- package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
- package/examples/bridge/mesh_event_publisher.hpp +0 -253
- package/examples/bridge/mesh_topology_reporter.hpp +0 -303
- package/examples/bridge/mqtt_command_bridge.hpp +0 -459
- package/examples/bridge/mqtt_status_bridge.hpp +0 -519
- package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
- package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
- package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
- package/examples/diagnosticsExample/platformio.ini +0 -26
- package/examples/echoNode/echoNode.ino +0 -33
- package/examples/echoNode/platformio.ini +0 -26
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
- package/examples/meshCommandNode/meshCommandNode.ino +0 -265
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
- package/examples/mqttCommandBridge/platformio.ini +0 -27
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
- package/examples/mqttStatusBridge/platformio.ini +0 -27
- package/examples/mqttTopologyTest/README.md +0 -467
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
- package/examples/mqttTopologyTest/platformio.ini +0 -27
- package/examples/multi_bridge/README.md +0 -346
- package/examples/multi_bridge/primary_bridge.ino +0 -108
- package/examples/multi_bridge/regular_node.ino +0 -141
- package/examples/multi_bridge/secondary_bridge.ino +0 -123
- package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
- package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
- package/examples/queued_alarms/README.md +0 -390
- package/examples/queued_alarms/queued_alarms.ino +0 -265
- package/examples/routing_demo/README.md +0 -172
- package/examples/routing_demo/routing_demo.ino +0 -102
- package/examples/rtcIntegration/README.md +0 -294
- package/examples/rtcIntegration/rtcIntegration.ino +0 -210
|
@@ -1,209 +0,0 @@
|
|
|
1
|
-
# Channel Synchronization in painlessMesh
|
|
2
|
-
|
|
3
|
-
## Problem Statement
|
|
4
|
-
|
|
5
|
-
When a mesh network operates on one channel and a node promotes to bridge via election, it may connect to a router operating on a different channel. This creates a channel mismatch where:
|
|
6
|
-
|
|
7
|
-
1. Bridge node switches to router's channel (e.g., channel 6)
|
|
8
|
-
2. Other mesh nodes remain on original channel (e.g., channel 1)
|
|
9
|
-
3. Bridge takeover announcements sent on new channel are not heard by nodes on old channel
|
|
10
|
-
4. Nodes cannot find the mesh network and become isolated
|
|
11
|
-
|
|
12
|
-
## Solution Overview
|
|
13
|
-
|
|
14
|
-
The solution has two complementary parts:
|
|
15
|
-
|
|
16
|
-
### Part 1: Automatic Channel Re-detection
|
|
17
|
-
|
|
18
|
-
Nodes automatically detect when they can't find the mesh on their current channel and trigger a full channel scan to locate it.
|
|
19
|
-
|
|
20
|
-
**Implementation:** `src/painlessMeshSTA.cpp` and `src/painlessMeshSTA.h`
|
|
21
|
-
|
|
22
|
-
**Key Components:**
|
|
23
|
-
- `consecutiveEmptyScans` counter tracks scans with no mesh nodes found
|
|
24
|
-
- `EMPTY_SCAN_THRESHOLD` constant (6 scans) determines when to trigger re-scan
|
|
25
|
-
- Full channel scan using `scanForMeshChannel()` when threshold reached
|
|
26
|
-
- Automatic channel update and AP restart when mesh found on different channel
|
|
27
|
-
|
|
28
|
-
**Flow:**
|
|
29
|
-
```
|
|
30
|
-
1. Node scans on current channel (e.g., channel 1)
|
|
31
|
-
2. Finds no mesh nodes → increment consecutiveEmptyScans
|
|
32
|
-
3. Repeat for EMPTY_SCAN_THRESHOLD scans (~30 seconds with fast scanning)
|
|
33
|
-
4. Trigger scanForMeshChannel() to scan ALL channels (1-13)
|
|
34
|
-
5. If mesh found on different channel:
|
|
35
|
-
a. Update mesh->_meshChannel to detected channel
|
|
36
|
-
b. Restart AP on new channel
|
|
37
|
-
c. Reset consecutiveEmptyScans counter
|
|
38
|
-
6. Continue normal scanning on new channel
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
**Safeguards:**
|
|
42
|
-
- Only triggers when WiFi.status() != WL_CONNECTED (not when stably connected)
|
|
43
|
-
- Only triggers when channel > 0 (channel 0 already means auto-detect)
|
|
44
|
-
- Resets counter when mesh nodes are found (prevents false triggers)
|
|
45
|
-
|
|
46
|
-
### Part 2: Dual-Channel Takeover Announcements
|
|
47
|
-
|
|
48
|
-
Bridge promotion sends takeover announcements on both the old and new channels to ensure all nodes are notified.
|
|
49
|
-
|
|
50
|
-
**Implementation:** `src/arduino/wifi.hpp` in `promoteToBridge()` method
|
|
51
|
-
|
|
52
|
-
**Flow:**
|
|
53
|
-
```
|
|
54
|
-
1. Node wins bridge election
|
|
55
|
-
2. Send takeover announcement on CURRENT channel (e.g., channel 1)
|
|
56
|
-
→ Nodes still on channel 1 receive this announcement
|
|
57
|
-
3. Wait 1 second for announcement to propagate
|
|
58
|
-
4. Stop mesh and reinitialize as bridge via initAsBridge()
|
|
59
|
-
→ Connects to router, detects router's channel (e.g., channel 6)
|
|
60
|
-
→ Initializes mesh on channel 6
|
|
61
|
-
5. Schedule follow-up takeover announcement on NEW channel (channel 6)
|
|
62
|
-
→ Sent 3 seconds after initialization
|
|
63
|
-
→ Nodes that switched to channel 6 receive this announcement
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
**Benefits:**
|
|
67
|
-
- Early announcement notifies nodes on old channel before bridge switches
|
|
68
|
-
- Delayed announcement notifies nodes that switched early or quickly found new channel
|
|
69
|
-
- Ensures complete mesh awareness regardless of node timing
|
|
70
|
-
|
|
71
|
-
## Expected Behavior
|
|
72
|
-
|
|
73
|
-
### Scenario: Bridge Promotion with Channel Change
|
|
74
|
-
|
|
75
|
-
**Setup:**
|
|
76
|
-
- Node1: Regular mesh node on channel 1
|
|
77
|
-
- Node2: Regular mesh node on channel 1 (weak router signal)
|
|
78
|
-
- Router: Operating on channel 6
|
|
79
|
-
|
|
80
|
-
**Sequence:**
|
|
81
|
-
1. Node2 starts mesh on channel 1 (default, no router connection)
|
|
82
|
-
2. Node1 joins mesh on channel 1
|
|
83
|
-
3. Node1 wins bridge election (better router signal)
|
|
84
|
-
4. Node1 sends "Becoming bridge" announcement on channel 1
|
|
85
|
-
5. Node2 receives announcement
|
|
86
|
-
6. Node1 connects to router on channel 6, initializes mesh on channel 6
|
|
87
|
-
7. Node1 sends follow-up "I'm the bridge" announcement on channel 6
|
|
88
|
-
8. Node2 can't find mesh on channel 1 for 6 consecutive scans
|
|
89
|
-
9. Node2 triggers full channel scan, finds mesh on channel 6
|
|
90
|
-
10. Node2 updates to channel 6, restarts AP on channel 6
|
|
91
|
-
11. Node2 reconnects to Node1 on channel 6
|
|
92
|
-
12. Mesh network is now unified on channel 6
|
|
93
|
-
|
|
94
|
-
**Timeline:**
|
|
95
|
-
- T+0s: Node1 wins election, sends announcement on channel 1
|
|
96
|
-
- T+1s: Node1 stops mesh on channel 1
|
|
97
|
-
- T+2s: Node1 initializes mesh on channel 6
|
|
98
|
-
- T+5s: Node1 sends follow-up announcement on channel 6
|
|
99
|
-
- T+30s: Node2 can't find mesh on channel 1 (fast scanning)
|
|
100
|
-
- T+30s: Node2 triggers channel re-scan
|
|
101
|
-
- T+31s: Node2 finds mesh on channel 6
|
|
102
|
-
- T+32s: Node2 restarts AP on channel 6
|
|
103
|
-
- T+35s: Node2 reconnects to mesh on channel 6
|
|
104
|
-
|
|
105
|
-
## Configuration
|
|
106
|
-
|
|
107
|
-
### Adjusting Re-scan Threshold
|
|
108
|
-
|
|
109
|
-
The `EMPTY_SCAN_THRESHOLD` is defined in `src/painlessMeshSTA.h`:
|
|
110
|
-
|
|
111
|
-
```cpp
|
|
112
|
-
static const uint16_t EMPTY_SCAN_THRESHOLD = 6; // ~30 seconds at default SCAN_INTERVAL
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
**Trade-offs:**
|
|
116
|
-
- **Lower value** (e.g., 3): Faster channel detection, but more susceptible to false triggers
|
|
117
|
-
- **Higher value** (e.g., 10): More stable, but slower response to channel changes
|
|
118
|
-
|
|
119
|
-
### Scan Timing
|
|
120
|
-
|
|
121
|
-
Default scan intervals defined in `src/painlessmesh/configuration.hpp`:
|
|
122
|
-
|
|
123
|
-
```cpp
|
|
124
|
-
#define SCAN_INTERVAL 30 * TASK_SECOND // AP scan period in ms
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
When no mesh nodes found, scanning switches to fast mode:
|
|
128
|
-
```cpp
|
|
129
|
-
task.setInterval(0.5 * SCAN_INTERVAL); // 15 seconds
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
With EMPTY_SCAN_THRESHOLD=6 and fast scanning:
|
|
133
|
-
- Time to trigger re-scan: 6 × 15s = 90 seconds (~1.5 minutes)
|
|
134
|
-
|
|
135
|
-
## Debugging
|
|
136
|
-
|
|
137
|
-
### Log Messages
|
|
138
|
-
|
|
139
|
-
**Channel Re-detection:**
|
|
140
|
-
```
|
|
141
|
-
CONNECTION: connectToAP(): No mesh nodes found for 6 scans, triggering channel re-detection
|
|
142
|
-
CONNECTION: scanForMeshChannel(): Scanning all channels for mesh 'YourMesh'...
|
|
143
|
-
CONNECTION: scanForMeshChannel(): Found mesh on channel 6 (RSSI: -45)
|
|
144
|
-
CONNECTION: connectToAP(): Mesh found on different channel 6 (was 1), updating...
|
|
145
|
-
CONNECTION: connectToAP(): Restarting AP from channel 1 to channel 6
|
|
146
|
-
CONNECTION: connectToAP(): AP restarted on channel 6
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Bridge Promotion:**
|
|
150
|
-
```
|
|
151
|
-
STARTUP: === Becoming Bridge Node ===
|
|
152
|
-
STARTUP: Sending takeover announcement on current channel before switching...
|
|
153
|
-
STARTUP: ✓ Takeover announcement sent on channel 1
|
|
154
|
-
STARTUP: Step 1: Connecting to router YourRouter...
|
|
155
|
-
STARTUP: ✓ Router connected on channel 6
|
|
156
|
-
STARTUP: Step 2: Initializing mesh on channel 6...
|
|
157
|
-
STARTUP: ✓ Bridge promotion complete on channel 6
|
|
158
|
-
STARTUP: Sending follow-up takeover announcement on new channel 6
|
|
159
|
-
STARTUP: ✓ Follow-up takeover announcement sent
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
### Common Issues
|
|
163
|
-
|
|
164
|
-
**Issue:** Nodes don't switch channels
|
|
165
|
-
- **Check:** Ensure `channel=0` in init() for auto-detection
|
|
166
|
-
- **Check:** Verify nodes are not connected via stationManual() to router
|
|
167
|
-
- **Check:** Increase log level to see scanning activity
|
|
168
|
-
|
|
169
|
-
**Issue:** Channel switching takes too long
|
|
170
|
-
- **Solution:** Reduce EMPTY_SCAN_THRESHOLD in painlessMeshSTA.h
|
|
171
|
-
- **Trade-off:** May increase false triggers during temporary network instability
|
|
172
|
-
|
|
173
|
-
**Issue:** Bridge promotion doesn't work
|
|
174
|
-
- **Check:** Verify router credentials are configured
|
|
175
|
-
- **Check:** Ensure router has good signal strength (> -80 dBm)
|
|
176
|
-
- **Check:** Confirm router is on a valid channel (1-13 for 2.4GHz)
|
|
177
|
-
|
|
178
|
-
## Testing
|
|
179
|
-
|
|
180
|
-
### Manual Testing Procedure
|
|
181
|
-
|
|
182
|
-
1. Setup two ESP32/ESP8266 nodes with painlessMesh
|
|
183
|
-
2. Configure router on channel 6
|
|
184
|
-
3. Start both nodes without router credentials (will use channel 1)
|
|
185
|
-
4. Configure one node with router credentials and trigger election
|
|
186
|
-
5. Monitor serial output for channel switching messages
|
|
187
|
-
6. Verify both nodes eventually operate on channel 6
|
|
188
|
-
7. Verify mesh connectivity is maintained
|
|
189
|
-
|
|
190
|
-
### Expected Results
|
|
191
|
-
|
|
192
|
-
- Bridge node switches to router channel within 5 seconds
|
|
193
|
-
- Non-bridge nodes detect channel change within 90 seconds
|
|
194
|
-
- All nodes reconnect on new channel
|
|
195
|
-
- No loss of mesh connectivity (except during transition)
|
|
196
|
-
|
|
197
|
-
## Related Files
|
|
198
|
-
|
|
199
|
-
- `src/painlessMeshSTA.h` - StationScan class definition with channel re-detection
|
|
200
|
-
- `src/painlessMeshSTA.cpp` - Channel re-detection implementation
|
|
201
|
-
- `src/arduino/wifi.hpp` - Bridge promotion with dual announcements
|
|
202
|
-
- `test/catch/catch_channel_resync.cpp` - Unit tests for channel synchronization
|
|
203
|
-
- `BRIDGE_TO_INTERNET.md` - Bridge setup documentation
|
|
204
|
-
|
|
205
|
-
## References
|
|
206
|
-
|
|
207
|
-
- Issue #137: Bridge takeover announcements not heard across channels
|
|
208
|
-
- WiFi channels: 1-13 for 2.4GHz (channels 12-13 restricted in some regions)
|
|
209
|
-
- ESP32/ESP8266 can only operate on one channel at a time in AP+STA mode
|
|
@@ -1,321 +0,0 @@
|
|
|
1
|
-
# Creating Missing GitHub Releases for v1.7.8 and v1.7.9
|
|
2
|
-
|
|
3
|
-
## Problem
|
|
4
|
-
|
|
5
|
-
Versions 1.7.8 and 1.7.9 have:
|
|
6
|
-
- ✅ CHANGELOG.md entries (complete release notes)
|
|
7
|
-
- ✅ Release summary documentation (docs/releases/RELEASE_SUMMARY_v1.7.x.md)
|
|
8
|
-
- ✅ Version numbers in library files (library.properties, library.json, package.json)
|
|
9
|
-
- ❌ **Missing GitHub Releases** (no tags, no release pages)
|
|
10
|
-
|
|
11
|
-
This means:
|
|
12
|
-
- Users cannot download these specific versions from GitHub
|
|
13
|
-
- Release automation may not have run properly
|
|
14
|
-
- NPM/GitHub Packages may not have been published
|
|
15
|
-
|
|
16
|
-
## Solution: Create GitHub Releases Retroactively
|
|
17
|
-
|
|
18
|
-
### Option 1: Automated Script (Recommended)
|
|
19
|
-
|
|
20
|
-
We've created a script to automate the process:
|
|
21
|
-
|
|
22
|
-
```bash
|
|
23
|
-
./scripts/create-missing-releases.sh
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
**What it does:**
|
|
27
|
-
1. Extracts release notes from CHANGELOG.md
|
|
28
|
-
2. Creates git tags (v1.7.8, v1.7.9)
|
|
29
|
-
3. Pushes tags to GitHub
|
|
30
|
-
4. Creates GitHub releases with proper release notes
|
|
31
|
-
5. Provides links to verify releases
|
|
32
|
-
|
|
33
|
-
**Requirements:**
|
|
34
|
-
- GitHub CLI (`gh`) installed: https://cli.github.com/
|
|
35
|
-
- Authenticated with GitHub: `gh auth login`
|
|
36
|
-
- Write access to the repository
|
|
37
|
-
|
|
38
|
-
**Running the script:**
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Navigate to repository root
|
|
42
|
-
cd /path/to/painlessMesh
|
|
43
|
-
|
|
44
|
-
# Run the script
|
|
45
|
-
./scripts/create-missing-releases.sh
|
|
46
|
-
|
|
47
|
-
# Follow the prompts
|
|
48
|
-
# - Confirm you want to proceed
|
|
49
|
-
# - If releases exist, choose whether to recreate them
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### Option 2: Manual Process
|
|
53
|
-
|
|
54
|
-
If you prefer to create releases manually or the script doesn't work:
|
|
55
|
-
|
|
56
|
-
#### Step 1: Extract Release Notes
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
# Extract v1.7.8 notes
|
|
60
|
-
awk '/^## \[1\.7\.8\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.8.txt
|
|
61
|
-
|
|
62
|
-
# Extract v1.7.9 notes
|
|
63
|
-
awk '/^## \[1\.7\.9\]/ {flag=1; next} /^## \[/ {flag=0} flag' CHANGELOG.md > release_notes_1.7.9.txt
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
#### Step 2: Create Tags and Releases via GitHub CLI
|
|
67
|
-
|
|
68
|
-
**For v1.7.8:**
|
|
69
|
-
```bash
|
|
70
|
-
# Create and push tag
|
|
71
|
-
git tag -a v1.7.8 -m "painlessMesh v1.7.8"
|
|
72
|
-
git push origin v1.7.8
|
|
73
|
-
|
|
74
|
-
# Create GitHub release
|
|
75
|
-
gh release create v1.7.8 \
|
|
76
|
-
--repo Alteriom/painlessMesh \
|
|
77
|
-
--title "painlessMesh v1.7.8" \
|
|
78
|
-
--notes-file release_notes_1.7.8.txt
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**For v1.7.9:**
|
|
82
|
-
```bash
|
|
83
|
-
# Create and push tag
|
|
84
|
-
git tag -a v1.7.9 -m "painlessMesh v1.7.9"
|
|
85
|
-
git push origin v1.7.9
|
|
86
|
-
|
|
87
|
-
# Create GitHub release
|
|
88
|
-
gh release create v1.7.9 \
|
|
89
|
-
--repo Alteriom/painlessMesh \
|
|
90
|
-
--title "painlessMesh v1.7.9" \
|
|
91
|
-
--notes-file release_notes_1.7.9.txt
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
#### Step 3: Create Releases via GitHub Web UI
|
|
95
|
-
|
|
96
|
-
If you don't have GitHub CLI:
|
|
97
|
-
|
|
98
|
-
1. **Go to**: https://github.com/Alteriom/painlessMesh/releases/new
|
|
99
|
-
2. **For v1.7.8**:
|
|
100
|
-
- Tag: `v1.7.8`
|
|
101
|
-
- Release title: `painlessMesh v1.7.8`
|
|
102
|
-
- Description: Copy content from `CHANGELOG.md` section `[1.7.8]`
|
|
103
|
-
- Click "Publish release"
|
|
104
|
-
3. **For v1.7.9**:
|
|
105
|
-
- Tag: `v1.7.9`
|
|
106
|
-
- Release title: `painlessMesh v1.7.9`
|
|
107
|
-
- Description: Copy content from `CHANGELOG.md` section `[1.7.9]`
|
|
108
|
-
- Click "Publish release"
|
|
109
|
-
|
|
110
|
-
## Verification
|
|
111
|
-
|
|
112
|
-
After creating the releases, verify:
|
|
113
|
-
|
|
114
|
-
### 1. Check GitHub Releases Page
|
|
115
|
-
```bash
|
|
116
|
-
# View releases via CLI
|
|
117
|
-
gh release list --repo Alteriom/painlessMesh
|
|
118
|
-
|
|
119
|
-
# Or visit in browser
|
|
120
|
-
# https://github.com/Alteriom/painlessMesh/releases
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Expected output:**
|
|
124
|
-
```
|
|
125
|
-
v1.7.9 painlessMesh v1.7.9 Latest 2025-11-08
|
|
126
|
-
v1.7.8 painlessMesh v1.7.8 2025-11-05
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
### 2. Check Tags
|
|
130
|
-
```bash
|
|
131
|
-
git fetch --tags
|
|
132
|
-
git tag -l | grep -E "v1.7.[89]"
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Expected output:**
|
|
136
|
-
```
|
|
137
|
-
v1.7.8
|
|
138
|
-
v1.7.9
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### 3. Verify Release Notes
|
|
142
|
-
Visit each release page and confirm:
|
|
143
|
-
- ✅ Release notes match CHANGELOG.md content
|
|
144
|
-
- ✅ Date is correct (v1.7.8: Nov 5, 2025; v1.7.9: Nov 8, 2025)
|
|
145
|
-
- ✅ Release is marked as "Latest" for v1.7.9
|
|
146
|
-
|
|
147
|
-
## Publishing Packages
|
|
148
|
-
|
|
149
|
-
After creating the GitHub releases, you may want to publish packages to NPM and GitHub Packages.
|
|
150
|
-
|
|
151
|
-
### Check if Already Published
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# Check NPM
|
|
155
|
-
npm view @alteriom/painlessmesh versions
|
|
156
|
-
|
|
157
|
-
# Check if 1.7.8 and 1.7.9 are listed
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
### Publish if Missing
|
|
161
|
-
|
|
162
|
-
If versions are not published:
|
|
163
|
-
|
|
164
|
-
```bash
|
|
165
|
-
# Option 1: Trigger manual publish workflow
|
|
166
|
-
gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
|
|
167
|
-
|
|
168
|
-
# Option 2: Manual NPM publish (requires NPM token)
|
|
169
|
-
npm publish --access public
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Why This Happened
|
|
173
|
-
|
|
174
|
-
The releases were likely missed because:
|
|
175
|
-
|
|
176
|
-
1. **Commits didn't trigger release workflow** - The release workflow triggers on:
|
|
177
|
-
- Commits to `main` branch
|
|
178
|
-
- Changes to version files OR commit message starting with `release:`
|
|
179
|
-
- If neither condition was met, no release was created
|
|
180
|
-
|
|
181
|
-
2. **Version was bumped without triggering release** - The version files were updated but:
|
|
182
|
-
- Commit message didn't start with `release:`
|
|
183
|
-
- Or changes were pushed to a different branch first
|
|
184
|
-
|
|
185
|
-
3. **Workflow may have failed** - Check GitHub Actions history for failed workflows
|
|
186
|
-
|
|
187
|
-
## Preventing Future Issues
|
|
188
|
-
|
|
189
|
-
### Ensure Releases Trigger Properly
|
|
190
|
-
|
|
191
|
-
The release workflow (`.github/workflows/release.yml`) triggers when:
|
|
192
|
-
|
|
193
|
-
1. **Automatic trigger** (recommended):
|
|
194
|
-
- Modify `library.properties`, `library.json`, or `package.json`
|
|
195
|
-
- Commit changes to `main` branch
|
|
196
|
-
- Workflow automatically detects version bump and creates release
|
|
197
|
-
|
|
198
|
-
2. **Manual trigger**:
|
|
199
|
-
- Commit message starts with `release:`
|
|
200
|
-
- Example: `git commit -m "release: v1.8.0 - New features"`
|
|
201
|
-
|
|
202
|
-
### Best Practices for Future Releases
|
|
203
|
-
|
|
204
|
-
1. **Use the bump-version script:**
|
|
205
|
-
```bash
|
|
206
|
-
./scripts/bump-version.sh patch # or minor, major
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
2. **Update CHANGELOG.md** with release notes
|
|
210
|
-
|
|
211
|
-
3. **Use release agent to validate:**
|
|
212
|
-
```bash
|
|
213
|
-
./scripts/release-agent.sh
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
4. **Commit with proper message:**
|
|
217
|
-
```bash
|
|
218
|
-
git add library.properties library.json package.json CHANGELOG.md
|
|
219
|
-
git commit -m "release: v1.8.0 - Brief description"
|
|
220
|
-
git push origin main
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
5. **Verify workflow runs:**
|
|
224
|
-
- Go to: https://github.com/Alteriom/painlessMesh/actions
|
|
225
|
-
- Watch the "Automated Release" workflow
|
|
226
|
-
- Confirm it completes successfully
|
|
227
|
-
|
|
228
|
-
6. **Check release was created:**
|
|
229
|
-
```bash
|
|
230
|
-
gh release list --repo Alteriom/painlessMesh
|
|
231
|
-
```
|
|
232
|
-
|
|
233
|
-
### Monitoring Release Success
|
|
234
|
-
|
|
235
|
-
After pushing a release commit, verify:
|
|
236
|
-
|
|
237
|
-
- ✅ GitHub Actions workflow runs successfully
|
|
238
|
-
- ✅ Git tag is created and pushed
|
|
239
|
-
- ✅ GitHub release is created with notes
|
|
240
|
-
- ✅ NPM package is published
|
|
241
|
-
- ✅ GitHub Packages is updated
|
|
242
|
-
- ✅ Wiki is synchronized (if enabled)
|
|
243
|
-
|
|
244
|
-
View the workflow run:
|
|
245
|
-
```bash
|
|
246
|
-
gh run list --workflow=release.yml --repo Alteriom/painlessMesh
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Troubleshooting
|
|
250
|
-
|
|
251
|
-
### "Tag already exists" Error
|
|
252
|
-
|
|
253
|
-
If tags exist but releases don't:
|
|
254
|
-
```bash
|
|
255
|
-
# Delete existing tags (careful!)
|
|
256
|
-
git tag -d v1.7.8
|
|
257
|
-
git push origin :refs/tags/v1.7.8
|
|
258
|
-
|
|
259
|
-
# Then recreate using the script
|
|
260
|
-
./scripts/create-missing-releases.sh
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
### "Permission denied" Error
|
|
264
|
-
|
|
265
|
-
You need write access to the repository:
|
|
266
|
-
- Verify you're authenticated: `gh auth status`
|
|
267
|
-
- Check your permissions on the repository
|
|
268
|
-
- Contact repository owner for access
|
|
269
|
-
|
|
270
|
-
### Script Fails
|
|
271
|
-
|
|
272
|
-
If the automated script fails:
|
|
273
|
-
1. Check error messages
|
|
274
|
-
2. Verify GitHub CLI is installed: `gh --version`
|
|
275
|
-
3. Verify you're authenticated: `gh auth login`
|
|
276
|
-
4. Try manual process (Option 2 above)
|
|
277
|
-
|
|
278
|
-
### Release Notes Are Empty
|
|
279
|
-
|
|
280
|
-
If release notes extraction fails:
|
|
281
|
-
1. Verify CHANGELOG.md format matches expected pattern
|
|
282
|
-
2. Check that version sections exist: `## [1.7.8]` and `## [1.7.9]`
|
|
283
|
-
3. Manually copy content from CHANGELOG.md
|
|
284
|
-
|
|
285
|
-
## Additional Resources
|
|
286
|
-
|
|
287
|
-
- **Release Guide**: See `RELEASE_GUIDE.md` for complete release process
|
|
288
|
-
- **GitHub Releases**: https://github.com/Alteriom/painlessMesh/releases
|
|
289
|
-
- **GitHub CLI Docs**: https://cli.github.com/manual/
|
|
290
|
-
- **Release Workflow**: `.github/workflows/release.yml`
|
|
291
|
-
|
|
292
|
-
## Summary
|
|
293
|
-
|
|
294
|
-
**To create missing releases:**
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
# Quick method (automated)
|
|
298
|
-
./scripts/create-missing-releases.sh
|
|
299
|
-
|
|
300
|
-
# Verify
|
|
301
|
-
gh release list --repo Alteriom/painlessMesh
|
|
302
|
-
|
|
303
|
-
# Publish packages if needed
|
|
304
|
-
gh workflow run manual-publish.yml --repo Alteriom/painlessMesh
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
**To prevent future issues:**
|
|
308
|
-
|
|
309
|
-
```bash
|
|
310
|
-
# Always use this workflow for releases:
|
|
311
|
-
./scripts/bump-version.sh patch
|
|
312
|
-
# Update CHANGELOG.md
|
|
313
|
-
./scripts/release-agent.sh # Validate
|
|
314
|
-
git add . && git commit -m "release: vX.Y.Z - Description"
|
|
315
|
-
git push origin main
|
|
316
|
-
# Watch GitHub Actions to confirm success
|
|
317
|
-
```
|
|
318
|
-
|
|
319
|
-
---
|
|
320
|
-
|
|
321
|
-
**Questions?** Open an issue with the `ci/cd` label.
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
# painlessMesh Documentation - Docusaurus Migration
|
|
2
|
-
|
|
3
|
-
## Overview
|
|
4
|
-
|
|
5
|
-
This document outlines the migration from the current custom documentation approach to **Docusaurus 3** for better user experience and maintainability.
|
|
6
|
-
|
|
7
|
-
## Current Issues
|
|
8
|
-
|
|
9
|
-
### Broken Links Found
|
|
10
|
-
- `docs/tutorials/custom-packages.md` - Missing
|
|
11
|
-
- `docs/tutorials/sensor-networks.md` - Missing
|
|
12
|
-
- `docs/advanced/performance.md` - Missing
|
|
13
|
-
- `docs/architecture/routing.md` - Missing
|
|
14
|
-
|
|
15
|
-
### Problems with Current Approach
|
|
16
|
-
1. **Raw Markdown** - No processing, links break in GitHub Pages
|
|
17
|
-
2. **Manual HTML generation** - Basic and unmaintainable
|
|
18
|
-
3. **Doxygen isolation** - Separate from user documentation
|
|
19
|
-
4. **No link validation** - Broken links undetected
|
|
20
|
-
5. **No search functionality** - Poor discoverability
|
|
21
|
-
6. **Poor mobile experience** - Not responsive
|
|
22
|
-
|
|
23
|
-
## Proposed Solution: Docusaurus 3
|
|
24
|
-
|
|
25
|
-
### Why Docusaurus?
|
|
26
|
-
- ✅ **Modern React-based** - Fast, responsive, beautiful
|
|
27
|
-
- ✅ **Built-in search** - Algolia integration
|
|
28
|
-
- ✅ **API docs integration** - Seamless with Doxygen
|
|
29
|
-
- ✅ **Link validation** - Automatic broken link detection
|
|
30
|
-
- ✅ **Versioning support** - Multiple library versions
|
|
31
|
-
- ✅ **GitHub Pages deployment** - Automated CI/CD
|
|
32
|
-
- ✅ **SEO optimized** - Better search engine ranking
|
|
33
|
-
|
|
34
|
-
### Implementation Plan
|
|
35
|
-
|
|
36
|
-
#### Phase 1: Setup Docusaurus
|
|
37
|
-
```bash
|
|
38
|
-
# Initialize Docusaurus
|
|
39
|
-
npx create-docusaurus@latest website classic
|
|
40
|
-
|
|
41
|
-
# Configure for painlessMesh
|
|
42
|
-
cd website
|
|
43
|
-
npm install --save @docusaurus/plugin-client-redirects
|
|
44
|
-
npm install --save @docusaurus/theme-mermaid
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
#### Phase 2: Content Migration
|
|
48
|
-
1. **Migrate existing docs** to `docs/` folder
|
|
49
|
-
2. **Create missing pages** identified in review
|
|
50
|
-
3. **Fix all broken links**
|
|
51
|
-
4. **Integrate Doxygen** output
|
|
52
|
-
5. **Add interactive examples**
|
|
53
|
-
|
|
54
|
-
#### Phase 3: Enhanced Features
|
|
55
|
-
1. **Search integration** with Algolia
|
|
56
|
-
2. **API documentation** with auto-generated content
|
|
57
|
-
3. **Interactive code examples**
|
|
58
|
-
4. **Version management** for releases
|
|
59
|
-
5. **Analytics integration**
|
|
60
|
-
|
|
61
|
-
## File Structure (Proposed)
|
|
62
|
-
|
|
63
|
-
```
|
|
64
|
-
website/
|
|
65
|
-
├── docs/ # Main documentation
|
|
66
|
-
│ ├── getting-started/
|
|
67
|
-
│ │ ├── installation.md
|
|
68
|
-
│ │ ├── quickstart.md
|
|
69
|
-
│ │ └── first-mesh.md
|
|
70
|
-
│ ├── api/
|
|
71
|
-
│ │ ├── core-api.md
|
|
72
|
-
│ │ └── alteriom-packages.md
|
|
73
|
-
│ ├── tutorials/
|
|
74
|
-
│ │ ├── basic-examples.md
|
|
75
|
-
│ │ ├── custom-packages.md # NEW - Currently missing
|
|
76
|
-
│ │ └── sensor-networks.md # NEW - Currently missing
|
|
77
|
-
│ ├── architecture/
|
|
78
|
-
│ │ ├── mesh-architecture.md
|
|
79
|
-
│ │ ├── plugin-system.md
|
|
80
|
-
│ │ └── routing.md # NEW - Currently missing
|
|
81
|
-
│ ├── advanced/
|
|
82
|
-
│ │ └── performance.md # NEW - Currently missing
|
|
83
|
-
│ └── troubleshooting/
|
|
84
|
-
│ ├── faq.md
|
|
85
|
-
│ └── common-issues.md
|
|
86
|
-
├── src/
|
|
87
|
-
│ ├── components/ # React components
|
|
88
|
-
│ └── pages/ # Custom pages
|
|
89
|
-
├── static/ # Static assets
|
|
90
|
-
├── docusaurus.config.js # Main configuration
|
|
91
|
-
└── sidebars.js # Navigation structure
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Benefits
|
|
95
|
-
|
|
96
|
-
### For Users
|
|
97
|
-
- 🚀 **Faster navigation** - Single-page app performance
|
|
98
|
-
- 🔍 **Powerful search** - Find anything instantly
|
|
99
|
-
- 📱 **Mobile-friendly** - Responsive design
|
|
100
|
-
- 🎯 **Better organization** - Clear navigation
|
|
101
|
-
- 💡 **Interactive examples** - Live code demos
|
|
102
|
-
|
|
103
|
-
### For Maintainers
|
|
104
|
-
- 🔗 **Link validation** - Automatic broken link detection
|
|
105
|
-
- 📝 **Easy content management** - Simple Markdown workflow
|
|
106
|
-
- 🚀 **Automated deployment** - GitHub Actions integration
|
|
107
|
-
- 📊 **Analytics** - Usage insights
|
|
108
|
-
- 🔄 **Version control** - Git-based workflow
|
|
109
|
-
|
|
110
|
-
## Migration Timeline
|
|
111
|
-
|
|
112
|
-
### Week 1: Setup & Configuration
|
|
113
|
-
- [ ] Initialize Docusaurus project
|
|
114
|
-
- [ ] Configure for painlessMesh branding
|
|
115
|
-
- [ ] Set up build pipeline
|
|
116
|
-
|
|
117
|
-
### Week 2: Content Migration
|
|
118
|
-
- [ ] Migrate existing documentation
|
|
119
|
-
- [ ] Create missing pages
|
|
120
|
-
- [ ] Fix all broken links
|
|
121
|
-
- [ ] Integrate Doxygen output
|
|
122
|
-
|
|
123
|
-
### Week 3: Enhancement & Testing
|
|
124
|
-
- [ ] Add search functionality
|
|
125
|
-
- [ ] Create interactive examples
|
|
126
|
-
- [ ] Mobile testing
|
|
127
|
-
- [ ] Performance optimization
|
|
128
|
-
|
|
129
|
-
### Week 4: Deployment & Cleanup
|
|
130
|
-
- [ ] Deploy to GitHub Pages
|
|
131
|
-
- [ ] Update all repository links
|
|
132
|
-
- [ ] Archive old documentation
|
|
133
|
-
- [ ] Team training
|
|
134
|
-
|
|
135
|
-
## Implementation Commands
|
|
136
|
-
|
|
137
|
-
```bash
|
|
138
|
-
# 1. Create Docusaurus site
|
|
139
|
-
npx create-docusaurus@latest docs-website classic
|
|
140
|
-
cd docs-website
|
|
141
|
-
|
|
142
|
-
# 2. Install additional plugins
|
|
143
|
-
npm install --save @docusaurus/plugin-client-redirects
|
|
144
|
-
npm install --save @docusaurus/theme-mermaid
|
|
145
|
-
npm install --save @docusaurus/plugin-google-analytics
|
|
146
|
-
|
|
147
|
-
# 3. Configure build for GitHub Pages
|
|
148
|
-
npm run build
|
|
149
|
-
|
|
150
|
-
# 4. Deploy
|
|
151
|
-
npm run deploy
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
## Cost-Benefit Analysis
|
|
155
|
-
|
|
156
|
-
### Current Approach Costs
|
|
157
|
-
- ❌ **Developer time** - Manual HTML maintenance
|
|
158
|
-
- ❌ **User frustration** - Broken links, poor UX
|
|
159
|
-
- ❌ **SEO penalty** - Poor search ranking
|
|
160
|
-
- ❌ **Mobile users** - Bad mobile experience
|
|
161
|
-
|
|
162
|
-
### Docusaurus Benefits
|
|
163
|
-
- ✅ **Time savings** - Automated builds
|
|
164
|
-
- ✅ **Better UX** - Professional documentation
|
|
165
|
-
- ✅ **SEO boost** - Optimized for search engines
|
|
166
|
-
- ✅ **Future-proof** - Modern, maintained framework
|
|
167
|
-
|
|
168
|
-
## Recommendation
|
|
169
|
-
|
|
170
|
-
**Immediate Action**: Implement Docusaurus 3 migration
|
|
171
|
-
|
|
172
|
-
**Priority**: High - Current documentation has critical usability issues
|
|
173
|
-
|
|
174
|
-
**Timeline**: 2-4 weeks for full migration
|
|
175
|
-
|
|
176
|
-
**ROI**: High - Significantly better user experience with minimal ongoing maintenance
|