@alteriom/painlessmesh 1.6.1 → 1.7.3

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 (152) hide show
  1. package/CHANGELOG.md +435 -144
  2. package/LICENSE +674 -674
  3. package/README.md +491 -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 +130 -71
  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/archive/DOCUSAURUS_DEPLOYMENT.md +166 -0
  25. package/docs/archive/FEATURE_PROPOSALS.md +337 -0
  26. package/docs/archive/LIBRARY_JSON_FIX.md +98 -0
  27. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +215 -0
  28. package/docs/archive/PHASE1_IMPLEMENTATION.md +325 -0
  29. package/docs/archive/PHASE2_IMPLEMENTATION.md +567 -0
  30. package/docs/archive/RELEASE_SUMMARY.md +173 -0
  31. package/docs/archive/SCONS_BUILD_FIX.md +313 -0
  32. package/docs/archive/TRIGGER_RELEASE.md +280 -0
  33. package/docs/archive/VECTOR_INCLUDE_FIX.md +129 -0
  34. package/docs/archive/ota-and-status-enhancements.md +911 -0
  35. package/docs/archive/ota-status-architecture-diagrams.md +658 -0
  36. package/docs/archive/ota-status-quick-reference.md +284 -0
  37. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +71 -0
  38. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +1011 -0
  39. package/docs/development/DOCKER_TESTING.md +196 -0
  40. package/docs/development/PLATFORMIO_USAGE.md +180 -0
  41. package/docs/development/TESTING_SUMMARY.md +126 -0
  42. package/docs/development/contributing.md +301 -0
  43. package/docs/development/documentation.md +583 -0
  44. package/docs/getting-started/first-mesh.md +409 -409
  45. package/docs/getting-started/installation.md +274 -274
  46. package/docs/getting-started/quickstart.md +157 -157
  47. package/docs/improvements/FUTURE_PROPOSALS.md +1016 -0
  48. package/docs/improvements/IMPLEMENTATION_HISTORY.md +1091 -0
  49. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +709 -0
  50. package/docs/improvements/README.md +212 -69
  51. package/docs/platformio-publishing.md +255 -0
  52. package/docs/platformio-setup-summary.md +121 -0
  53. package/docs/releases/FEATURE_HISTORY.md +543 -0
  54. package/docs/releases/PATCH_v1.7.3.md +262 -0
  55. package/docs/releases/PHASE1_SUMMARY.md +246 -0
  56. package/docs/releases/PHASE2_SUMMARY.md +499 -0
  57. package/docs/releases/RELEASE_NOTES_1.7.0.md +539 -0
  58. package/docs/troubleshooting/common-issues.md +520 -520
  59. package/docs/troubleshooting/debugging.md +455 -0
  60. package/docs/troubleshooting/faq.md +472 -472
  61. package/docs/tutorials/basic-examples.md +717 -717
  62. package/docs/wiki/API-Reference.md +245 -245
  63. package/docs/wiki/Complete-Documentation.md +122 -122
  64. package/examples/alteriom/README.md +139 -81
  65. package/examples/alteriom/alteriom.ino +186 -185
  66. package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
  67. package/examples/alteriom/platformio.ini +24 -24
  68. package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
  69. package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
  70. package/examples/alteriomImproved/platformio.ini +25 -0
  71. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
  72. package/examples/alteriomPhase1/phase1_features.ino +242 -0
  73. package/examples/alteriomPhase1/platformio.ini +25 -0
  74. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
  75. package/examples/alteriomPhase2/phase2_features.ino +186 -0
  76. package/examples/alteriomPhase2/platformio.ini +25 -0
  77. package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
  78. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
  79. package/examples/alteriomSensorNode/platformio.ini +25 -0
  80. package/examples/basic/basic.ino +66 -66
  81. package/examples/basic/platformio.ini +25 -25
  82. package/examples/bridge/bridge.ino +51 -51
  83. package/examples/bridge/mesh_event_publisher.hpp +253 -0
  84. package/examples/bridge/mesh_topology_reporter.hpp +303 -0
  85. package/examples/bridge/mqtt_command_bridge.hpp +459 -0
  86. package/examples/bridge/mqtt_status_bridge.hpp +519 -0
  87. package/examples/bridge/platformio.ini +25 -25
  88. package/examples/echoNode/echoNode.ino +33 -33
  89. package/examples/echoNode/platformio.ini +25 -25
  90. package/examples/logClient/logClient.ino +109 -109
  91. package/examples/logClient/platformio.ini +25 -25
  92. package/examples/logServer/logServer.ino +81 -81
  93. package/examples/logServer/platformio.ini +25 -25
  94. package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
  95. package/examples/meshCommandNode/meshCommandNode.ino +263 -0
  96. package/examples/meshCommandNode/platformio.ini +25 -0
  97. package/examples/mqttBridge/mqttBridge.ino +118 -118
  98. package/examples/mqttBridge/platformio.ini +26 -26
  99. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
  100. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
  101. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
  102. package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
  103. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
  104. package/examples/mqttCommandBridge/platformio.ini +26 -0
  105. package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
  106. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
  107. package/examples/mqttStatusBridge/platformio.ini +26 -0
  108. package/examples/mqttTopologyTest/README.md +467 -0
  109. package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
  110. package/examples/mqttTopologyTest/platformio.ini +26 -0
  111. package/examples/namedMesh/namedMesh.ino +97 -97
  112. package/examples/namedMesh/platformio.ini +25 -25
  113. package/examples/otaReceiver/otaReceiver.ino +79 -79
  114. package/examples/otaReceiver/platformio.ini +25 -25
  115. package/examples/otaSender/otaSender.ino +160 -151
  116. package/examples/otaSender/platformio.ini +25 -25
  117. package/examples/startHere/platformio.ini +25 -25
  118. package/examples/startHere/startHere.ino +159 -159
  119. package/examples/webServer/platformio.ini +27 -27
  120. package/examples/webServer/webServer.ino +89 -89
  121. package/keywords.txt +48 -48
  122. package/library.json +55 -34
  123. package/library.properties +10 -10
  124. package/package.json +86 -78
  125. package/src/AlteriomPainlessMesh.h +97 -97
  126. package/src/arduino/wifi.hpp +365 -365
  127. package/src/boost/asynctcp.hpp +279 -279
  128. package/src/painlessMesh.h +70 -70
  129. package/src/painlessMeshSTA.cpp +236 -236
  130. package/src/painlessMeshSTA.h +58 -58
  131. package/src/painlessTaskOptions.h +4 -4
  132. package/src/painlessmesh/base64.hpp +111 -111
  133. package/src/painlessmesh/buffer.hpp +229 -229
  134. package/src/painlessmesh/callback.hpp +91 -91
  135. package/src/painlessmesh/configuration.hpp +77 -77
  136. package/src/painlessmesh/connection.hpp +192 -192
  137. package/src/painlessmesh/layout.hpp +188 -188
  138. package/src/painlessmesh/logger.hpp +158 -158
  139. package/src/painlessmesh/memory.hpp +119 -119
  140. package/src/painlessmesh/mesh.hpp +761 -560
  141. package/src/painlessmesh/metrics.hpp +322 -322
  142. package/src/painlessmesh/ntp.hpp +263 -263
  143. package/src/painlessmesh/ota.hpp +582 -553
  144. package/src/painlessmesh/plugin.hpp +188 -188
  145. package/src/painlessmesh/protocol.hpp +813 -813
  146. package/src/painlessmesh/router.hpp +338 -322
  147. package/src/painlessmesh/tcp.hpp +71 -71
  148. package/src/painlessmesh/validation.hpp +238 -238
  149. package/src/plugin/performance.hpp +214 -214
  150. package/src/plugin/remote.hpp +64 -64
  151. package/src/scheduler.cpp +10 -10
  152. package/src/wifi.cpp +2 -2
@@ -1,186 +1,187 @@
1
- //************************************************************
2
- // AlteriomPainlessMesh Example
3
- //
4
- // This example demonstrates how to use AlteriomPainlessMesh
5
- // with custom packages for sensor data, commands, and status
6
- //
7
- // This is the primary example that matches the folder name
8
- // for Arduino Library Manager compatibility
9
- //************************************************************
10
-
11
- #include "AlteriomPainlessMesh.h"
12
-
13
- #define MESH_PREFIX "AlteriomMesh"
14
- #define MESH_PASSWORD "somethingSneaky"
15
- #define MESH_PORT 5555
16
-
17
- Scheduler userScheduler; // to control your personal task
18
- painlessMesh mesh;
19
-
20
- // Alteriom package handlers
21
- using namespace alteriom;
22
-
23
- // User stub
24
- void sendSensorData();
25
- void handleIncomingPackage(uint32_t from, String& msg);
26
- void handleCommandPackage(CommandPackage& cmd);
27
- void handleStatusRequest();
28
-
29
- Task taskSendSensorData(30000, TASK_FOREVER, &sendSensorData);
30
- Task taskSendStatus(60000, TASK_FOREVER, &handleStatusRequest);
31
-
32
- void setup() {
33
- Serial.begin(115200);
34
-
35
- // Initialize mesh
36
- mesh.setDebugMsgTypes(ERROR | MESH_STATUS | CONNECTION | SYNC |
37
- COMMUNICATION | GENERAL | MSG_TYPES | REMOTE);
38
- mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
39
- mesh.onReceive(&handleIncomingPackage);
40
- mesh.onNewConnection(&newConnectionCallback);
41
- mesh.onChangedConnections(&changedConnectionCallback);
42
- mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
43
-
44
- // Add tasks
45
- userScheduler.addTask(taskSendSensorData);
46
- taskSendSensorData.enable();
47
-
48
- userScheduler.addTask(taskSendStatus);
49
- taskSendStatus.enable();
50
-
51
- // Initialize sensors (placeholder)
52
- Serial.println("Alteriom Sensor Node initialized");
53
- }
54
-
55
- void loop() { mesh.update(); }
56
-
57
- void sendSensorData() {
58
- // Create sensor package
59
- SensorPackage sensorData;
60
- sensorData.from = mesh.getNodeId();
61
- sensorData.sensorId = mesh.getNodeId(); // Use node ID as sensor ID
62
- sensorData.timestamp = mesh.getNodeTime();
63
-
64
- // Read sensor values (placeholder - replace with actual sensor readings)
65
- sensorData.temperature =
66
- 23.5 + random(-50, 50) / 10.0; // Simulate temperature
67
- sensorData.humidity = 45.0 + random(-100, 100) / 10.0; // Simulate humidity
68
- sensorData.pressure = 1013.25 + random(-50, 50) / 10.0; // Simulate pressure
69
- sensorData.batteryLevel = 85 + random(-20, 15); // Simulate battery
70
-
71
- // Serialize and send
72
- DynamicJsonDocument doc(sensorData.jsonObjectSize());
73
- JsonObject obj = doc.to<JsonObject>();
74
- sensorData.addTo(std::move(obj));
75
-
76
- String msg;
77
- serializeJson(doc, msg);
78
- mesh.sendBroadcast(msg);
79
-
80
- Serial.printf("Sent sensor data: T=%.1f, H=%.1f, P=%.1f, Bat=%d%%\n",
81
- sensorData.temperature, sensorData.humidity,
82
- sensorData.pressure, sensorData.batteryLevel);
83
- }
84
-
85
- void handleStatusRequest() {
86
- StatusPackage status;
87
- status.from = mesh.getNodeId();
88
- status.deviceStatus = 0x01; // Device operational
89
- status.uptime = millis() / 1000;
90
- status.freeMemory = ESP.getFreeHeap() / 1024; // KB
91
- status.wifiStrength = 75; // Placeholder
92
- status.firmwareVersion = "1.0.0-alteriom";
93
-
94
- // Serialize and send
95
- DynamicJsonDocument doc(status.jsonObjectSize());
96
- JsonObject obj = doc.to<JsonObject>();
97
- status.addTo(std::move(obj));
98
-
99
- String msg;
100
- serializeJson(doc, msg);
101
- mesh.sendBroadcast(msg);
102
-
103
- Serial.printf("Sent status: uptime=%ds, mem=%dKB\n", status.uptime,
104
- status.freeMemory);
105
- }
106
-
107
- void handleIncomingPackage(uint32_t from, String& msg) {
108
- Serial.printf("Received from %u: %s\n", from, msg.c_str());
109
-
110
- // Parse the JSON message
111
- DynamicJsonDocument doc(1024);
112
- deserializeJson(doc, msg);
113
- JsonObject obj = doc.as<JsonObject>();
114
-
115
- // Check message type
116
- uint8_t msgType = obj["type"];
117
-
118
- switch (msgType) {
119
- case 200: // SensorPackage
120
- {
121
- SensorPackage receivedSensor(obj);
122
- Serial.printf("Sensor data from %u: T=%.1f, H=%.1f\n",
123
- receivedSensor.from, receivedSensor.temperature,
124
- receivedSensor.humidity);
125
- // Process sensor data (store, forward, analyze, etc.)
126
- } break;
127
-
128
- case 201: // CommandPackage
129
- {
130
- CommandPackage receivedCmd(obj);
131
- if (receivedCmd.dest == mesh.getNodeId()) {
132
- handleCommandPackage(receivedCmd);
133
- }
134
- } break;
135
-
136
- case 202: // StatusPackage
137
- {
138
- StatusPackage receivedStatus(obj);
139
- Serial.printf("Status from %u: uptime=%ds, mem=%dKB, fw=%s\n",
140
- receivedStatus.from, receivedStatus.uptime,
141
- receivedStatus.freeMemory,
142
- receivedStatus.firmwareVersion.c_str());
143
- } break;
144
-
145
- default:
146
- Serial.printf("Unknown message type: %d\n", msgType);
147
- break;
148
- }
149
- }
150
-
151
- void handleCommandPackage(CommandPackage& cmd) {
152
- Serial.printf("Received command %d for device %u\n", cmd.command,
153
- cmd.targetDevice);
154
-
155
- // Process different command types
156
- switch (cmd.command) {
157
- case 1: // Reset command
158
- Serial.println("Reset command received");
159
- // Implement reset logic
160
- break;
161
-
162
- case 2: // Configuration update
163
- Serial.printf("Config update: %s\n", cmd.parameters.c_str());
164
- // Parse and apply configuration
165
- break;
166
-
167
- case 3: // Data request
168
- Serial.println("Data request received");
169
- sendSensorData(); // Send current sensor data
170
- break;
171
-
172
- default:
173
- Serial.printf("Unknown command: %d\n", cmd.command);
174
- break;
175
- }
176
- }
177
-
178
- void newConnectionCallback(uint32_t nodeId) {
179
- Serial.printf("New Connection, nodeId = %u\n", nodeId);
180
- }
181
-
182
- void changedConnectionCallback() { Serial.printf("Changed connections\n"); }
183
-
184
- void nodeTimeAdjustedCallback(int32_t offset) {
185
- Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
1
+ //************************************************************
2
+ // AlteriomPainlessMesh Example
3
+ //
4
+ // This example demonstrates how to use AlteriomPainlessMesh
5
+ // with custom packages for sensor data, commands, and status
6
+ //
7
+ // This is the primary example that matches the folder name
8
+ // for Arduino Library Manager compatibility
9
+ //************************************************************
10
+
11
+ #include "AlteriomPainlessMesh.h"
12
+ #include "alteriom_sensor_package.hpp"
13
+
14
+ #define MESH_PREFIX "AlteriomMesh"
15
+ #define MESH_PASSWORD "somethingSneaky"
16
+ #define MESH_PORT 5555
17
+
18
+ Scheduler userScheduler; // to control your personal task
19
+ painlessMesh mesh;
20
+
21
+ // Alteriom package handlers
22
+ using namespace alteriom;
23
+
24
+ // User stub
25
+ void sendSensorData();
26
+ void handleIncomingPackage(uint32_t from, String& msg);
27
+ void handleCommandPackage(CommandPackage& cmd);
28
+ void handleStatusRequest();
29
+
30
+ Task taskSendSensorData(30000, TASK_FOREVER, &sendSensorData);
31
+ Task taskSendStatus(60000, TASK_FOREVER, &handleStatusRequest);
32
+
33
+ void setup() {
34
+ Serial.begin(115200);
35
+
36
+ // Initialize mesh
37
+ mesh.setDebugMsgTypes(ERROR | MESH_STATUS | CONNECTION | SYNC |
38
+ COMMUNICATION | GENERAL | MSG_TYPES | REMOTE);
39
+ mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
40
+ mesh.onReceive(&handleIncomingPackage);
41
+ mesh.onNewConnection(&newConnectionCallback);
42
+ mesh.onChangedConnections(&changedConnectionCallback);
43
+ mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
44
+
45
+ // Add tasks
46
+ userScheduler.addTask(taskSendSensorData);
47
+ taskSendSensorData.enable();
48
+
49
+ userScheduler.addTask(taskSendStatus);
50
+ taskSendStatus.enable();
51
+
52
+ // Initialize sensors (placeholder)
53
+ Serial.println("Alteriom Sensor Node initialized");
54
+ }
55
+
56
+ void loop() { mesh.update(); }
57
+
58
+ void sendSensorData() {
59
+ // Create sensor package
60
+ SensorPackage sensorData;
61
+ sensorData.from = mesh.getNodeId();
62
+ sensorData.sensorId = mesh.getNodeId(); // Use node ID as sensor ID
63
+ sensorData.timestamp = mesh.getNodeTime();
64
+
65
+ // Read sensor values (placeholder - replace with actual sensor readings)
66
+ sensorData.temperature =
67
+ 23.5 + random(-50, 50) / 10.0; // Simulate temperature
68
+ sensorData.humidity = 45.0 + random(-100, 100) / 10.0; // Simulate humidity
69
+ sensorData.pressure = 1013.25 + random(-50, 50) / 10.0; // Simulate pressure
70
+ sensorData.batteryLevel = 85 + random(-20, 15); // Simulate battery
71
+
72
+ // Serialize and send (using ArduinoJson v7 API)
73
+ JsonDocument doc;
74
+ JsonObject obj = doc.to<JsonObject>();
75
+ sensorData.addTo(std::move(obj));
76
+
77
+ String msg;
78
+ serializeJson(doc, msg);
79
+ mesh.sendBroadcast(msg);
80
+
81
+ Serial.printf("Sent sensor data: T=%.1f, H=%.1f, P=%.1f, Bat=%d%%\n",
82
+ sensorData.temperature, sensorData.humidity,
83
+ sensorData.pressure, sensorData.batteryLevel);
84
+ }
85
+
86
+ void handleStatusRequest() {
87
+ StatusPackage status;
88
+ status.from = mesh.getNodeId();
89
+ status.deviceStatus = 0x01; // Device operational
90
+ status.uptime = millis() / 1000;
91
+ status.freeMemory = ESP.getFreeHeap() / 1024; // KB
92
+ status.wifiStrength = 75; // Placeholder
93
+ status.firmwareVersion = "1.0.0-alteriom";
94
+
95
+ // Serialize and send (using ArduinoJson v7 API)
96
+ JsonDocument doc;
97
+ JsonObject obj = doc.to<JsonObject>();
98
+ status.addTo(std::move(obj));
99
+
100
+ String msg;
101
+ serializeJson(doc, msg);
102
+ mesh.sendBroadcast(msg);
103
+
104
+ Serial.printf("Sent status: uptime=%ds, mem=%dKB\n", status.uptime,
105
+ status.freeMemory);
106
+ }
107
+
108
+ void handleIncomingPackage(uint32_t from, String& msg) {
109
+ Serial.printf("Received from %u: %s\n", from, msg.c_str());
110
+
111
+ // Parse the JSON message (using ArduinoJson v7 API)
112
+ JsonDocument doc;
113
+ deserializeJson(doc, msg);
114
+ JsonObject obj = doc.as<JsonObject>();
115
+
116
+ // Check message type
117
+ uint8_t msgType = obj["type"];
118
+
119
+ switch (msgType) {
120
+ case 200: // SensorPackage
121
+ {
122
+ SensorPackage receivedSensor(obj);
123
+ Serial.printf("Sensor data from %u: T=%.1f, H=%.1f\n",
124
+ receivedSensor.from, receivedSensor.temperature,
125
+ receivedSensor.humidity);
126
+ // Process sensor data (store, forward, analyze, etc.)
127
+ } break;
128
+
129
+ case 201: // CommandPackage
130
+ {
131
+ CommandPackage receivedCmd(obj);
132
+ if (receivedCmd.dest == mesh.getNodeId()) {
133
+ handleCommandPackage(receivedCmd);
134
+ }
135
+ } break;
136
+
137
+ case 202: // StatusPackage
138
+ {
139
+ StatusPackage receivedStatus(obj);
140
+ Serial.printf("Status from %u: uptime=%ds, mem=%dKB, fw=%s\n",
141
+ receivedStatus.from, receivedStatus.uptime,
142
+ receivedStatus.freeMemory,
143
+ receivedStatus.firmwareVersion.c_str());
144
+ } break;
145
+
146
+ default:
147
+ Serial.printf("Unknown message type: %d\n", msgType);
148
+ break;
149
+ }
150
+ }
151
+
152
+ void handleCommandPackage(CommandPackage& cmd) {
153
+ Serial.printf("Received command %d for device %u\n", cmd.command,
154
+ cmd.targetDevice);
155
+
156
+ // Process different command types
157
+ switch (cmd.command) {
158
+ case 1: // Reset command
159
+ Serial.println("Reset command received");
160
+ // Implement reset logic
161
+ break;
162
+
163
+ case 2: // Configuration update
164
+ Serial.printf("Config update: %s\n", cmd.parameters.c_str());
165
+ // Parse and apply configuration
166
+ break;
167
+
168
+ case 3: // Data request
169
+ Serial.println("Data request received");
170
+ sendSensorData(); // Send current sensor data
171
+ break;
172
+
173
+ default:
174
+ Serial.printf("Unknown command: %d\n", cmd.command);
175
+ break;
176
+ }
177
+ }
178
+
179
+ void newConnectionCallback(uint32_t nodeId) {
180
+ Serial.printf("New Connection, nodeId = %u\n", nodeId);
181
+ }
182
+
183
+ void changedConnectionCallback() { Serial.printf("Changed connections\n"); }
184
+
185
+ void nodeTimeAdjustedCallback(int32_t offset) {
186
+ Serial.printf("Adjusted time %u. Offset = %d\n", mesh.getNodeTime(), offset);
186
187
  }