@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,467 +0,0 @@
1
- # MQTT Topology Test
2
-
3
- Hardware test sketch for painlessMesh topology reporting with @alteriom/mqtt-schema v0.5.0 compliance.
4
-
5
- ## 📋 Requirements
6
-
7
- ### Hardware
8
- - **3x ESP32 boards** (or ESP8266, but ESP32 recommended for better performance)
9
- - **3x USB cables** (for programming and Serial monitoring)
10
- - **MQTT broker** (e.g., Mosquitto, HiveMQ, or cloud service)
11
- - **WiFi network** accessible by all devices
12
-
13
- ### Software
14
- - Arduino IDE 2.x or PlatformIO
15
- - painlessMesh library (this repository)
16
- - PubSubClient library (for MQTT)
17
- - ArduinoJson library (v7.x)
18
-
19
- ## 🔧 Configuration
20
-
21
- ### 1. Configure WiFi (Gateway Only)
22
-
23
- Edit these lines in `mqttTopologyTest.ino`:
24
-
25
- ```cpp
26
- #define WIFI_SSID "YourWiFiSSID"
27
- #define WIFI_PASSWORD "YourWiFiPassword"
28
- ```
29
-
30
- ### 2. Configure MQTT Broker (Gateway Only)
31
-
32
- ```cpp
33
- #define MQTT_BROKER "192.168.1.100" // Your MQTT broker IP
34
- #define MQTT_PORT 1883
35
- #define MQTT_USER "" // Leave empty if no auth
36
- #define MQTT_PASS "" // Leave empty if no auth
37
- ```
38
-
39
- ### 3. Configure Each Node
40
-
41
- **Node 1 (Gateway):**
42
- ```cpp
43
- #define IS_GATEWAY true
44
- #define NODE_ROLE "gateway"
45
- ```
46
-
47
- **Node 2 (Sensor):**
48
- ```cpp
49
- #define IS_GATEWAY false
50
- #define NODE_ROLE "sensor"
51
- ```
52
-
53
- **Node 3 (Repeater):**
54
- ```cpp
55
- #define IS_GATEWAY false
56
- #define NODE_ROLE "repeater"
57
- ```
58
-
59
- ## 🚀 Installation & Testing
60
-
61
- ### Step 1: Setup MQTT Broker
62
-
63
- **Option A: Local Mosquitto (Recommended for testing)**
64
- ```bash
65
- # Install Mosquitto
66
- sudo apt-get install mosquitto mosquitto-clients
67
-
68
- # Start broker
69
- sudo systemctl start mosquitto
70
-
71
- # Test broker
72
- mosquitto_sub -h localhost -t "alteriom/mesh/#" -v
73
- ```
74
-
75
- **Option B: Docker Mosquitto**
76
- ```bash
77
- docker run -d -p 1883:1883 -p 9001:9001 eclipse-mosquitto
78
- ```
79
-
80
- **Option C: Cloud MQTT** (HiveMQ, CloudMQTT, etc.)
81
-
82
- ### Step 2: Flash Nodes
83
-
84
- 1. **Flash Node 1 (Gateway)**
85
- - Set `IS_GATEWAY = true`, `NODE_ROLE = "gateway"`
86
- - Upload sketch
87
- - Open Serial Monitor (115200 baud)
88
-
89
- 2. **Flash Node 2 (Sensor)**
90
- - Set `IS_GATEWAY = false`, `NODE_ROLE = "sensor"`
91
- - Upload sketch
92
- - Open Serial Monitor
93
-
94
- 3. **Flash Node 3 (Repeater)**
95
- - Set `IS_GATEWAY = false`, `NODE_ROLE = "repeater"`
96
- - Upload sketch
97
- - Open Serial Monitor
98
-
99
- ### Step 3: Monitor MQTT Messages
100
-
101
- **Terminal 1: Monitor all mesh topics**
102
- ```bash
103
- mosquitto_sub -h localhost -t "alteriom/mesh/#" -v
104
- ```
105
-
106
- **Terminal 2: Monitor topology only**
107
- ```bash
108
- mosquitto_sub -h localhost -t "alteriom/mesh/+/topology" -v
109
- ```
110
-
111
- **Terminal 3: Monitor events only**
112
- ```bash
113
- mosquitto_sub -h localhost -t "alteriom/mesh/+/events" -v
114
- ```
115
-
116
- ### Step 4: Test GET_TOPOLOGY Command
117
-
118
- **Send command:**
119
- ```bash
120
- mosquitto_pub -h localhost -t "alteriom/mesh/MESH-001/command" -m '{
121
- "event": "command",
122
- "command": "get_topology",
123
- "correlation_id": "test-001",
124
- "parameters": {
125
- "format": "full",
126
- "include_metrics": true
127
- }
128
- }'
129
- ```
130
-
131
- **Expected response on** `alteriom/mesh/MESH-001/topology/response`:
132
- ```json
133
- {
134
- "schema_version": 1,
135
- "device_id": "ALT-...",
136
- "event": "command_response",
137
- "command": "get_topology",
138
- "correlation_id": "test-001",
139
- "success": true,
140
- "result": {
141
- "event": "mesh_topology",
142
- "nodes": [...],
143
- "connections": [...],
144
- "metrics": {...}
145
- },
146
- "latency_ms": 850
147
- }
148
- ```
149
-
150
- ## 📊 Expected Behavior
151
-
152
- ### Mesh Formation (0-30 seconds)
153
- ```
154
- ✅ Node 2 joins mesh
155
- ✅ Node 3 joins mesh
156
- 🔄 Connections established
157
- ⏰ Time synchronized
158
- ```
159
-
160
- ### Full Topology Publishing (every 60 seconds)
161
- ```json
162
- {
163
- "event": "mesh_topology",
164
- "mesh_id": "MESH-001",
165
- "gateway_node_id": "ALT-6825DD341CA4",
166
- "update_type": "full",
167
- "nodes": [
168
- {
169
- "node_id": "ALT-6825DD341CA4",
170
- "role": "gateway",
171
- "status": "online",
172
- "connection_count": 2
173
- },
174
- {
175
- "node_id": "ALT-441D64F804A0",
176
- "role": "sensor",
177
- "status": "online"
178
- },
179
- {
180
- "node_id": "ALT-7F8E9D0A1B2C",
181
- "role": "repeater",
182
- "status": "online"
183
- }
184
- ],
185
- "connections": [
186
- {
187
- "from_node": "ALT-6825DD341CA4",
188
- "to_node": "ALT-441D64F804A0",
189
- "quality": 95,
190
- "latency_ms": 12,
191
- "rssi": -42,
192
- "hop_count": 1
193
- },
194
- {
195
- "from_node": "ALT-6825DD341CA4",
196
- "to_node": "ALT-7F8E9D0A1B2C",
197
- "quality": 88,
198
- "latency_ms": 18,
199
- "rssi": -55,
200
- "hop_count": 1
201
- }
202
- ],
203
- "metrics": {
204
- "total_nodes": 3,
205
- "online_nodes": 3,
206
- "network_diameter": 1,
207
- "avg_connection_quality": 91
208
- }
209
- }
210
- ```
211
-
212
- ### Incremental Updates (within 5 seconds of change)
213
-
214
- **When Node 4 joins:**
215
- ```json
216
- {
217
- "event": "mesh_topology",
218
- "update_type": "incremental",
219
- "nodes": [
220
- {
221
- "node_id": "ALT-NEW12345678",
222
- "role": "sensor",
223
- "status": "online"
224
- }
225
- ],
226
- "connections": [
227
- {
228
- "from_node": "ALT-6825DD341CA4",
229
- "to_node": "ALT-NEW12345678",
230
- "quality": 78
231
- }
232
- ]
233
- }
234
- ```
235
-
236
- **Followed by event:**
237
- ```json
238
- {
239
- "event": "mesh_event",
240
- "event_type": "node_join",
241
- "affected_nodes": ["ALT-NEW12345678"]
242
- }
243
- ```
244
-
245
- ### Node Leave Event
246
-
247
- **When node disconnects:**
248
- ```json
249
- {
250
- "event": "mesh_event",
251
- "event_type": "node_leave",
252
- "affected_nodes": ["ALT-441D64F804A0"],
253
- "details": {
254
- "reason": "timeout",
255
- "last_seen": "2025-10-14T15:08:45Z",
256
- "connections_lost": 1
257
- }
258
- }
259
- ```
260
-
261
- ## 🧪 Test Scenarios
262
-
263
- ### Test 1: Mesh Formation
264
- 1. Power on all 3 nodes
265
- 2. Watch Serial monitors for mesh formation
266
- 3. Verify full topology published within 60 seconds
267
- 4. ✅ **Pass:** All nodes appear in topology with correct roles
268
-
269
- ### Test 2: Incremental Updates
270
- 1. With mesh running, power off Node 3
271
- 2. Watch for `node_leave` event within 5 seconds
272
- 3. Verify incremental topology update shows Node 3 as offline
273
- 4. Power on Node 3 again
274
- 5. Watch for `node_join` event
275
- 6. ✅ **Pass:** Events published within 5 seconds of change
276
-
277
- ### Test 3: GET_TOPOLOGY Command
278
- 1. Send `get_topology` command via MQTT
279
- 2. Verify response on `/topology/response` topic
280
- 3. Check response includes `correlation_id`
281
- 4. Verify `latency_ms` is reasonable (< 2000ms)
282
- 5. ✅ **Pass:** Response received with correct structure
283
-
284
- ### Test 4: Schema Compliance
285
- 1. Copy any published message
286
- 2. Validate against @alteriom/mqtt-schema v0.5.0
287
- 3. Check all required envelope fields present
288
- 4. Verify Device ID format: `ALT-XXXXXXXXXXXX` (uppercase hex)
289
- 5. Verify quality values: 0-100 range
290
- 6. Verify RSSI values: negative dBm
291
- 7. ✅ **Pass:** All messages validate successfully
292
-
293
- ### Test 5: Quality Metrics
294
- 1. Move nodes physically closer/farther apart
295
- 2. Watch quality values change in topology updates
296
- 3. Verify RSSI becomes more negative with distance
297
- 4. Verify latency increases with poor connections
298
- 5. ✅ **Pass:** Metrics reflect connection quality
299
-
300
- ### Test 6: Network Diameter
301
- 1. Start with 2 nodes (gateway + 1 sensor)
302
- 2. Add 3rd node in range of sensor but not gateway
303
- 3. Verify `network_diameter` increases to 2
304
- 4. Verify `hop_count` shows multi-hop connections
305
- 5. ✅ **Pass:** Topology correctly represents mesh structure
306
-
307
- ## 🐛 Troubleshooting
308
-
309
- ### Issue: Nodes won't join mesh
310
-
311
- **Symptoms:**
312
- - Serial shows "Connecting to mesh..."
313
- - No "New connection" messages
314
-
315
- **Solutions:**
316
- 1. Verify all nodes have same `MESH_PREFIX` and `MESH_PASSWORD`
317
- 2. Check nodes are within WiFi range (< 30m indoors)
318
- 3. Try changing `MESH_PORT` to avoid conflicts
319
- 4. Disable WiFi on gateway temporarily to test sensor-to-sensor mesh
320
-
321
- ### Issue: Gateway won't connect to MQTT
322
-
323
- **Symptoms:**
324
- - "Connecting to MQTT broker... failed, rc=-2"
325
-
326
- **Solutions:**
327
- 1. Verify `MQTT_BROKER` IP is correct
328
- 2. Check broker is running: `mosquitto -v`
329
- 3. Test broker connectivity: `mosquitto_pub -h <IP> -t test -m hello`
330
- 4. Check firewall allows port 1883
331
- 5. If using authentication, verify `MQTT_USER` and `MQTT_PASS`
332
-
333
- ### Issue: Topology messages not publishing
334
-
335
- **Symptoms:**
336
- - Mesh formed but no MQTT messages
337
- - Serial shows "Failed to publish"
338
-
339
- **Solutions:**
340
- 1. Check MQTT buffer size (should be 2048+)
341
- 2. Verify topic permissions on broker
342
- 3. Check JSON message size (< 2KB recommended)
343
- 4. Monitor broker logs for errors
344
- 5. Reduce `FULL_TOPOLOGY_INTERVAL` to 10s for testing
345
-
346
- ### Issue: Device ID format incorrect
347
-
348
- **Symptoms:**
349
- - Device IDs like "ALT-0" or "ALT-12345"
350
-
351
- **Solutions:**
352
- 1. Verify using ESP32 (ESP8266 has different chip ID)
353
- 2. Check `getDeviceId()` function uses `%012llX` format
354
- 3. Confirm uppercase hex output
355
- 4. Test: Should be 16 characters total (ALT- + 12 hex digits)
356
-
357
- ### Issue: Quality metrics always 0 or 100
358
-
359
- **Symptoms:**
360
- - Quality stuck at boundary values
361
- - RSSI always -90 or 0
362
-
363
- **Solutions:**
364
- 1. Implement real RSSI measurement (this test uses simulation)
365
- 2. Add WiFi signal strength reading: `WiFi.RSSI()`
366
- 3. Calculate quality from packet loss, not simulation
367
- 4. Add latency measurement with ping/pong messages
368
-
369
- ### Issue: Incremental updates too slow
370
-
371
- **Symptoms:**
372
- - Node joins but update takes > 10 seconds
373
-
374
- **Solutions:**
375
- 1. Reduce `INCREMENTAL_INTERVAL` to 1000ms for testing
376
- 2. Check `lastTopologyUpdate` is being reset on connection changes
377
- 3. Verify callbacks are triggering: add Serial.println in `newConnectionCallback`
378
- 4. Confirm MQTT client is connected when change occurs
379
-
380
- ## 📈 Performance Optimization
381
-
382
- ### For Large Meshes (10+ nodes)
383
-
384
- 1. **Increase MQTT buffer:**
385
- ```cpp
386
- mqttClient.setBufferSize(4096);
387
- ```
388
-
389
- 2. **Reduce full topology frequency:**
390
- ```cpp
391
- #define FULL_TOPOLOGY_INTERVAL 300000 // 5 minutes
392
- ```
393
-
394
- 3. **Implement topology compression:**
395
- - Only send changed fields in incremental updates
396
- - Use shorter field names
397
- - Remove optional fields when empty
398
-
399
- 4. **Add QoS levels:**
400
- ```cpp
401
- mqttClient.publish(topic.c_str(), jsonString.c_str(), true); // Retained
402
- ```
403
-
404
- 5. **Batch incremental updates:**
405
- - Wait 10s for multiple changes
406
- - Send single update with all changes
407
-
408
- ### For ESP8266 (Limited Memory)
409
-
410
- 1. **Reduce JSON buffer size:**
411
- ```cpp
412
- JsonDocument doc; // Uses 1KB by default
413
- ```
414
-
415
- 2. **Stream JSON directly to MQTT:**
416
- ```cpp
417
- // Instead of String, use streaming
418
- mqttClient.beginPublish(topic.c_str(), measureJson(doc), false);
419
- serializeJson(doc, mqttClient);
420
- mqttClient.endPublish();
421
- ```
422
-
423
- 3. **Disable debug messages:**
424
- ```cpp
425
- mesh.setDebugMsgTypes(ERROR);
426
- ```
427
-
428
- ## 📚 Schema Reference
429
-
430
- This test implements these schemas from @alteriom/mqtt-schema v0.5.0:
431
-
432
- - ✅ **Envelope** (schema_version, device_id, device_type, timestamp, firmware_version)
433
- - ✅ **mesh_topology** (full and incremental updates)
434
- - ✅ **mesh_event** (node_join, node_leave events)
435
- - ✅ **command** (GET_TOPOLOGY command ID 300)
436
- - ✅ **command_response** (topology response with correlation_id)
437
-
438
- ## 🎯 Success Criteria
439
-
440
- Test is successful when:
441
-
442
- - [x] All 3 nodes join mesh within 30 seconds
443
- - [x] Full topology published every 60 seconds
444
- - [x] Incremental updates published within 5 seconds of changes
445
- - [x] Node join/leave events published immediately
446
- - [x] GET_TOPOLOGY command returns valid response
447
- - [x] All messages validate against @alteriom/mqtt-schema
448
- - [x] Device IDs follow ALT-XXXXXXXXXXXX format
449
- - [x] Quality metrics in 0-100 range
450
- - [x] RSSI values are negative
451
- - [x] Connection count matches actual mesh connections
452
-
453
- ## 📝 Notes
454
-
455
- - This test uses **simulated quality metrics** (RSSI, latency) based on node IDs
456
- - For production, implement **real measurements** using `WiFi.RSSI()` and ping/pong
457
- - The test uses **simplified topology** (all nodes connect to gateway)
458
- - For multi-hop meshes, implement **hop count tracking** from routing table
459
- - Message timing is **approximate** due to mesh synchronization delays
460
- - **Schema compliance** is validated by test/catch/catch_topology_schema.cpp
461
-
462
- ## 🔗 Related Documentation
463
-
464
- - [MQTT Schema Review](../../docs/MQTT_SCHEMA_REVIEW.md)
465
- - [MQTT Bridge Commands](../../docs/MQTT_BRIDGE_COMMANDS.md)
466
- - [Schema Validation Tests](../../test/catch/catch_topology_schema.cpp)
467
- - [@alteriom/mqtt-schema Package](https://www.npmjs.com/package/@alteriom/mqtt-schema)