@alteriom/painlessmesh 1.6.1 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/CHANGELOG.md +380 -143
  2. package/LICENSE +674 -674
  3. package/README.md +477 -434
  4. package/RELEASE_GUIDE.md +504 -418
  5. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
  6. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
  7. package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
  8. package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
  9. package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
  10. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
  11. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
  12. package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
  13. package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
  14. package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
  15. package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
  16. package/docs/PHASE1_GUIDE.md +349 -0
  17. package/docs/PHASE2_GUIDE.md +543 -0
  18. package/docs/README.md +77 -70
  19. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
  20. package/docs/alteriom/overview.md +507 -507
  21. package/docs/api/core-api.md +606 -606
  22. package/docs/architecture/mesh-architecture.md +378 -378
  23. package/docs/architecture/plugin-system.md +516 -516
  24. package/docs/getting-started/first-mesh.md +409 -409
  25. package/docs/getting-started/installation.md +274 -274
  26. package/docs/getting-started/quickstart.md +157 -157
  27. package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
  28. package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/improvements/README.md +86 -68
  31. package/docs/improvements/ota-and-status-enhancements.md +911 -0
  32. package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
  33. package/docs/improvements/ota-status-quick-reference.md +284 -0
  34. package/docs/platformio-publishing.md +255 -0
  35. package/docs/platformio-setup-summary.md +121 -0
  36. package/docs/troubleshooting/common-issues.md +520 -520
  37. package/docs/troubleshooting/faq.md +472 -472
  38. package/docs/tutorials/basic-examples.md +717 -717
  39. package/docs/wiki/API-Reference.md +245 -245
  40. package/docs/wiki/Complete-Documentation.md +122 -122
  41. package/examples/alteriom/README.md +139 -81
  42. package/examples/alteriom/alteriom.ino +186 -185
  43. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  44. package/examples/alteriom/platformio.ini +24 -24
  45. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  46. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  47. package/examples/alteriomImproved/platformio.ini +25 -0
  48. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  49. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  50. package/examples/alteriomPhase1/platformio.ini +25 -0
  51. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  52. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  53. package/examples/alteriomPhase2/platformio.ini +25 -0
  54. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  55. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  56. package/examples/alteriomSensorNode/platformio.ini +25 -0
  57. package/examples/basic/basic.ino +66 -66
  58. package/examples/basic/platformio.ini +25 -25
  59. package/examples/bridge/bridge.ino +51 -51
  60. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  61. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  62. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  63. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  64. package/examples/bridge/platformio.ini +25 -25
  65. package/examples/echoNode/echoNode.ino +33 -33
  66. package/examples/echoNode/platformio.ini +25 -25
  67. package/examples/logClient/logClient.ino +109 -109
  68. package/examples/logClient/platformio.ini +25 -25
  69. package/examples/logServer/logServer.ino +81 -81
  70. package/examples/logServer/platformio.ini +25 -25
  71. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  72. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  73. package/examples/meshCommandNode/platformio.ini +25 -0
  74. package/examples/mqttBridge/mqttBridge.ino +118 -118
  75. package/examples/mqttBridge/platformio.ini +26 -26
  76. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  77. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  78. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  79. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  80. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  81. package/examples/mqttCommandBridge/platformio.ini +26 -0
  82. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  83. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  84. package/examples/mqttStatusBridge/platformio.ini +26 -0
  85. package/examples/mqttTopologyTest/README.md +467 -0
  86. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  87. package/examples/mqttTopologyTest/platformio.ini +26 -0
  88. package/examples/namedMesh/namedMesh.ino +97 -97
  89. package/examples/namedMesh/platformio.ini +25 -25
  90. package/examples/otaReceiver/otaReceiver.ino +79 -79
  91. package/examples/otaReceiver/platformio.ini +25 -25
  92. package/examples/otaSender/otaSender.ino +160 -151
  93. package/examples/otaSender/platformio.ini +25 -25
  94. package/examples/startHere/platformio.ini +25 -25
  95. package/examples/startHere/startHere.ino +159 -159
  96. package/examples/webServer/platformio.ini +27 -27
  97. package/examples/webServer/webServer.ino +89 -89
  98. package/keywords.txt +48 -48
  99. package/library.json +55 -34
  100. package/library.properties +10 -10
  101. package/package.json +86 -78
  102. package/src/AlteriomPainlessMesh.h +97 -97
  103. package/src/arduino/wifi.hpp +365 -365
  104. package/src/boost/asynctcp.hpp +279 -279
  105. package/src/painlessMesh.h +70 -70
  106. package/src/painlessMeshSTA.cpp +236 -236
  107. package/src/painlessMeshSTA.h +58 -58
  108. package/src/painlessTaskOptions.h +4 -4
  109. package/src/painlessmesh/base64.hpp +111 -111
  110. package/src/painlessmesh/buffer.hpp +229 -229
  111. package/src/painlessmesh/callback.hpp +91 -91
  112. package/src/painlessmesh/configuration.hpp +77 -77
  113. package/src/painlessmesh/connection.hpp +192 -192
  114. package/src/painlessmesh/layout.hpp +188 -188
  115. package/src/painlessmesh/logger.hpp +158 -158
  116. package/src/painlessmesh/memory.hpp +119 -119
  117. package/src/painlessmesh/mesh.hpp +761 -560
  118. package/src/painlessmesh/metrics.hpp +322 -322
  119. package/src/painlessmesh/ntp.hpp +263 -263
  120. package/src/painlessmesh/ota.hpp +582 -553
  121. package/src/painlessmesh/plugin.hpp +188 -188
  122. package/src/painlessmesh/protocol.hpp +813 -813
  123. package/src/painlessmesh/router.hpp +322 -322
  124. package/src/painlessmesh/tcp.hpp +71 -71
  125. package/src/painlessmesh/validation.hpp +238 -238
  126. package/src/plugin/performance.hpp +214 -214
  127. package/src/plugin/remote.hpp +64 -64
  128. package/src/scheduler.cpp +10 -10
  129. package/src/wifi.cpp +2 -2
@@ -0,0 +1,285 @@
1
+ # Alteriom MQTT Schema Compliance
2
+
3
+ ## Overview
4
+
5
+ The painlessMesh library is compliant with the **@alteriom/mqtt-schema** specifications for all mesh-related messages. This ensures interoperability with other Alteriom services and monitoring tools.
6
+
7
+ ## Schema Package
8
+
9
+ - **Package:** `@alteriom/mqtt-schema` v0.5.0 (latest)
10
+ - **Registry:** npm (https://www.npmjs.com/package/@alteriom/mqtt-schema)
11
+ - **Documentation:** https://github.com/Alteriom/alteriom-mqtt-schema
12
+ - **Release:** v0.5.0 includes mesh topology and event schemas!
13
+
14
+ ---
15
+
16
+ ## v0.5.0 Compliance (Mesh Topology & Events)
17
+
18
+ ### Mesh Topology (alteriom/mesh/{mesh_id}/topology)
19
+
20
+ ✅ **Fully Compliant** with `mesh_topology.schema.json` v0.5.0
21
+
22
+ **Implementation:** `examples/bridge/mesh_topology_reporter.hpp`
23
+
24
+ **Required Fields:**
25
+ - ✅ Envelope: `schema_version`, `device_id`, `device_type`, `timestamp`, `firmware_version`
26
+ - ✅ Event: `mesh_topology`
27
+ - ✅ Mesh ID: `mesh_id`, `gateway_node_id`
28
+ - ✅ Nodes: Array with `node_id`, `role`, `status`, `last_seen`, `firmware_version`, `uptime_seconds`, `free_memory_kb`, `connection_count`
29
+ - ✅ Connections: Array with `from_node`, `to_node`, `quality`, `latency_ms`, `rssi`, `hop_count`
30
+ - ✅ Metrics: `total_nodes`, `online_nodes`, `network_diameter`, `avg_connection_quality`, `messages_per_second`
31
+ - ✅ Update Type: `full` or `incremental`
32
+
33
+ **Device ID Format:** `ALT-XXXXXXXXXXXX` (12 hex digits)
34
+
35
+ **MQTT Topics:**
36
+ - `alteriom/mesh/MESH-001/topology` - Full/incremental updates
37
+ - `alteriom/mesh/MESH-001/topology/response` - Command responses with `correlation_id`
38
+
39
+ **Publishing Schedule:**
40
+ - Full topology: Every 60 seconds
41
+ - Incremental: Every 5 seconds (if changed)
42
+ - On-demand: Via GET_TOPOLOGY command (300)
43
+
44
+ ### Mesh Events (alteriom/mesh/{mesh_id}/events)
45
+
46
+ ✅ **Fully Compliant** with `mesh_event.schema.json` v0.5.0
47
+
48
+ **Implementation:** `examples/bridge/mesh_event_publisher.hpp`
49
+
50
+ **Required Fields:**
51
+ - ✅ Envelope: `schema_version`, `device_id`, `device_type`, `timestamp`, `firmware_version`
52
+ - ✅ Event: `mesh_event`
53
+ - ✅ Event Type: `node_join`, `node_leave`, `connection_lost`, `connection_restored`, `network_split`, `network_merged`
54
+ - ✅ Mesh ID: `mesh_id`
55
+ - ✅ Affected Nodes: Array of device IDs
56
+ - ✅ Details: Object with event-specific information
57
+
58
+ **MQTT Topic:** `alteriom/mesh/MESH-001/events`
59
+
60
+ **Event Types Implemented:**
61
+ - ✅ `node_join` - New node connected
62
+ - ✅ `node_leave` - Node disconnected
63
+ - ✅ `connection_lost` - Direct connection failed
64
+ - ✅ `connection_restored` - Connection recovered
65
+ - ✅ `network_split` - Mesh partitioned (detection TBD)
66
+ - ✅ `network_merged` - Partitions rejoined (detection TBD)
67
+
68
+ ### Command Integration (GET_TOPOLOGY - Command 300)
69
+
70
+ ✅ **Fully Compliant** with `command.schema.json` and `command_response.schema.json`
71
+
72
+ **Implementation:** `examples/bridge/mqtt_command_bridge.hpp`
73
+
74
+ **Command Request:**
75
+ ```json
76
+ {
77
+ "command": 300,
78
+ "targetDevice": 0,
79
+ "commandId": 12345,
80
+ "parameters": "{}"
81
+ }
82
+ ```
83
+
84
+ **Command Response:**
85
+ - Full mesh topology with `correlation_id` field
86
+ - Published to: `alteriom/mesh/MESH-001/topology/response`
87
+ - Schema-compliant mesh_topology message
88
+
89
+ ---
90
+
91
+ ## v0.4.0 Compliance (Gateway Metrics & Commands)
92
+
93
+ ## Compliance Status
94
+
95
+ ### Gateway Metrics (mesh/status/metrics)
96
+
97
+ ✅ **Fully Compliant** with `gateway_metrics.schema.json` v1
98
+
99
+ **Required Envelope Fields:**
100
+ - `schema_version`: 1 (integer)
101
+ - `device_id`: Mesh node ID or custom identifier
102
+ - `device_type`: "gateway"
103
+ - `timestamp`: ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)
104
+ - `firmware_version`: String (configurable, default: "1.0.0")
105
+
106
+ **Metrics Object:**
107
+ - `uptime_s`: Uptime in seconds
108
+ - `mesh_nodes`: Number of connected mesh nodes
109
+ - `memory_usage_pct`: Memory usage percentage
110
+ - `connected_devices`: Number of connected devices
111
+
112
+ **Example Message:**
113
+ ```json
114
+ {
115
+ "schema_version": 1,
116
+ "device_id": "123456",
117
+ "device_type": "gateway",
118
+ "timestamp": "2024-01-01T12:34:56Z",
119
+ "firmware_version": "1.0.0",
120
+ "metrics": {
121
+ "uptime_s": 3600,
122
+ "mesh_nodes": 5,
123
+ "memory_usage_pct": 45.2,
124
+ "connected_devices": 5
125
+ }
126
+ }
127
+ ```
128
+
129
+ ### All Topics - 100% Compliant with Official v0.4.0! ✅
130
+
131
+ All MQTT topics are now **100% compliant** with official @alteriom/mqtt-schema@0.4.0:
132
+
133
+ - ✅ `mesh/status/metrics` - **100% compliant** with gateway_metrics.schema.json v1
134
+ - ✅ `mesh/status/nodes` - **100% compliant** with mesh_node_list.schema.json v1 (officially included in v0.4.0!)
135
+ - ✅ `mesh/status/topology` - **100% compliant** with mesh_topology.schema.json v1 (officially included in v0.4.0!)
136
+ - ✅ `mesh/status/alerts` - **100% compliant** with mesh_alert.schema.json v1 (officially included in v0.4.0!)
137
+ - ✅ `mesh/status/node/{id}` - **100% compliant** with sensor_status.schema.json v1
138
+
139
+ **All proposed schemas have been officially included in @alteriom/mqtt-schema@0.4.0!**
140
+
141
+ **All devices in the mesh network now report using official standardized schemas!**
142
+
143
+ ## Configuration
144
+
145
+ ### Setting Device Information
146
+
147
+ ```cpp
148
+ MqttStatusBridge bridge(mesh, mqttClient);
149
+
150
+ // Set device ID (defaults to mesh node ID)
151
+ bridge.setDeviceId("gateway-001");
152
+
153
+ // Set firmware version (defaults to "1.0.0")
154
+ bridge.setFirmwareVersion("2.1.3");
155
+
156
+ bridge.begin();
157
+ ```
158
+
159
+ ### Timestamp Generation
160
+
161
+ The implementation generates timestamps in ISO 8601 format compliant with the schema requirement.
162
+
163
+ **Production Recommendations:**
164
+ - **Preferred:** Use NTP time sync via WiFi or mesh time synchronization
165
+ - **Alternative:** Use RTC (Real-Time Clock) module for accurate timestamps
166
+ - **Fallback:** Current implementation uses Unix epoch (1970-01-01) + millis()
167
+
168
+ **Format:** `YYYY-MM-DDTHH:MM:SSZ` (ISO 8601 with Zulu time)
169
+
170
+ **Example Production Implementation:**
171
+ ```cpp
172
+ // With NTP (recommended)
173
+ #include <WiFi.h>
174
+ #include <time.h>
175
+
176
+ String getISO8601Timestamp() {
177
+ struct tm timeinfo;
178
+ if (!getLocalTime(&timeinfo)) {
179
+ return "1970-01-01T00:00:00Z"; // Fallback
180
+ }
181
+ char buffer[25];
182
+ strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%SZ", &timeinfo);
183
+ return String(buffer);
184
+ }
185
+
186
+ // Configure NTP in setup()
187
+ configTime(0, 0, "pool.ntp.org");
188
+ ```
189
+
190
+ ## Validation
191
+
192
+ To validate messages against the schema:
193
+
194
+ ```javascript
195
+ // Node.js example
196
+ const { validators } = require('@alteriom/mqtt-schema');
197
+
198
+ const message = JSON.parse(mqttPayload);
199
+ const result = validators.gatewayMetrics(message);
200
+
201
+ if (!result.valid) {
202
+ console.error('Validation errors:', result.errors);
203
+ }
204
+ ```
205
+
206
+ ## Benefits of Compliance
207
+
208
+ 1. **Interoperability**: Works with other Alteriom services
209
+ 2. **Validation**: Messages can be validated against published schemas
210
+ 3. **Type Safety**: TypeScript types available from the schema package
211
+ 4. **Documentation**: Schema serves as API documentation
212
+ 5. **Evolution**: Forward-compatible with schema versioning
213
+
214
+ ## Dependencies
215
+
216
+ Add to `package.json`:
217
+ ```json
218
+ {
219
+ "devDependencies": {
220
+ "@alteriom/mqtt-schema": "^0.4.0",
221
+ "ajv": "^8.17.0",
222
+ "ajv-formats": "^2.1.1"
223
+ }
224
+ }
225
+ ```
226
+
227
+ ## Migration Notes
228
+
229
+ If you have existing MQTT consumers expecting the old format:
230
+
231
+ **Old Format:**
232
+ ```json
233
+ {
234
+ "nodeCount": 5,
235
+ "rootNodeId": 123456,
236
+ "uptime": 3600,
237
+ "freeHeap": 45000,
238
+ "timestamp": 1234567890
239
+ }
240
+ ```
241
+
242
+ **New Format (Schema v1):**
243
+ ```json
244
+ {
245
+ "schema_version": 1,
246
+ "device_id": "123456",
247
+ "device_type": "gateway",
248
+ "timestamp": "2024-01-01T12:34:56Z",
249
+ "firmware_version": "1.0.0",
250
+ "metrics": {
251
+ "uptime_s": 3600,
252
+ "mesh_nodes": 5,
253
+ "memory_usage_pct": 45.2,
254
+ "connected_devices": 5
255
+ }
256
+ }
257
+ ```
258
+
259
+ **Migration Path:**
260
+ 1. Update MQTT consumers to handle both formats during transition
261
+ 2. Use `schema_version` field to detect new format
262
+ 3. Gradually migrate all publishers to new format
263
+ 4. Remove old format support once migration complete
264
+
265
+ ## References
266
+
267
+ - Schema Package: https://www.npmjs.com/package/@alteriom/mqtt-schema
268
+ - Schema Repository: https://github.com/Alteriom/alteriom-mqtt-schema
269
+ - JSON Schema Spec: https://json-schema.org/
270
+ - Phase 2 Guide: [PHASE2_GUIDE.md](PHASE2_GUIDE.md)
271
+ - Implementation: [mqtt_status_bridge.hpp](../examples/bridge/mqtt_status_bridge.hpp)
272
+
273
+ ## Future Enhancements
274
+
275
+ Potential schema alignment for other message types:
276
+ - Align node list with sensor_status schema
277
+ - Create custom mesh_topology schema
278
+ - Standardize alert format across Alteriom ecosystem
279
+ - Add validation helpers in the bridge class
280
+
281
+ ---
282
+
283
+ **Last Updated:** October 2024
284
+ **Schema Version:** v1
285
+ **Package Version:** @alteriom/mqtt-schema@0.4.0