@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
@@ -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
  }