@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.
- package/CHANGELOG.md +380 -143
- package/LICENSE +674 -674
- package/README.md +477 -434
- package/RELEASE_GUIDE.md +504 -418
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +175 -175
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +1062 -0
- package/docs/MESH_TOPOLOGY_GUIDE.md +992 -0
- package/docs/MESH_TOPOLOGY_PROGRESS.md +422 -0
- package/docs/MQTT_BRIDGE_COMMANDS.md +894 -0
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +324 -0
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +576 -0
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +285 -0
- package/docs/MQTT_SCHEMA_PROPOSALS.md +446 -0
- package/docs/MQTT_SCHEMA_REVIEW.md +690 -0
- package/docs/OTA_COMMANDS_REFERENCE.md +554 -0
- package/docs/PHASE1_GUIDE.md +349 -0
- package/docs/PHASE2_GUIDE.md +543 -0
- package/docs/README.md +77 -70
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +222 -0
- package/docs/alteriom/overview.md +507 -507
- package/docs/api/core-api.md +606 -606
- package/docs/architecture/mesh-architecture.md +378 -378
- package/docs/architecture/plugin-system.md +516 -516
- package/docs/getting-started/first-mesh.md +409 -409
- package/docs/getting-started/installation.md +274 -274
- package/docs/getting-started/quickstart.md +157 -157
- package/docs/improvements/FEATURE_PROPOSALS.md +337 -0
- package/docs/improvements/PHASE1_IMPLEMENTATION.md +325 -0
- package/docs/improvements/PHASE2_IMPLEMENTATION.md +567 -0
- package/docs/improvements/README.md +86 -68
- package/docs/improvements/ota-and-status-enhancements.md +911 -0
- package/docs/improvements/ota-status-architecture-diagrams.md +658 -0
- package/docs/improvements/ota-status-quick-reference.md +284 -0
- package/docs/platformio-publishing.md +255 -0
- package/docs/platformio-setup-summary.md +121 -0
- package/docs/troubleshooting/common-issues.md +520 -520
- package/docs/troubleshooting/faq.md +472 -472
- package/docs/tutorials/basic-examples.md +717 -717
- package/docs/wiki/API-Reference.md +245 -245
- package/docs/wiki/Complete-Documentation.md +122 -122
- package/examples/alteriom/README.md +139 -81
- package/examples/alteriom/alteriom.ino +186 -185
- package/examples/alteriom/alteriom_sensor_package.hpp +240 -127
- package/examples/alteriom/platformio.ini +24 -24
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +224 -0
- package/examples/{alteriom → alteriomImproved}/improved_sensor_node.ino +245 -245
- package/examples/alteriomImproved/platformio.ini +25 -0
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase1/phase1_features.ino +242 -0
- package/examples/alteriomPhase1/platformio.ini +25 -0
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomPhase2/phase2_features.ino +186 -0
- package/examples/alteriomPhase2/platformio.ini +25 -0
- package/examples/{alteriom → alteriomSensorNode}/alteriom_sensor_node.ino +183 -183
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +224 -0
- package/examples/alteriomSensorNode/platformio.ini +25 -0
- package/examples/basic/basic.ino +66 -66
- package/examples/basic/platformio.ini +25 -25
- package/examples/bridge/bridge.ino +51 -51
- package/examples/bridge/mesh_event_publisher.hpp +253 -0
- package/examples/bridge/mesh_topology_reporter.hpp +303 -0
- package/examples/bridge/mqtt_command_bridge.hpp +459 -0
- package/examples/bridge/mqtt_status_bridge.hpp +519 -0
- package/examples/bridge/platformio.ini +25 -25
- package/examples/echoNode/echoNode.ino +33 -33
- package/examples/echoNode/platformio.ini +25 -25
- package/examples/logClient/logClient.ino +109 -109
- package/examples/logClient/platformio.ini +25 -25
- package/examples/logServer/logServer.ino +81 -81
- package/examples/logServer/platformio.ini +25 -25
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +235 -0
- package/examples/meshCommandNode/meshCommandNode.ino +263 -0
- package/examples/meshCommandNode/platformio.ini +25 -0
- package/examples/mqttBridge/mqttBridge.ino +118 -118
- package/examples/mqttBridge/platformio.ini +26 -26
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +235 -0
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +253 -0
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +303 -0
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +252 -0
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +459 -0
- package/examples/mqttCommandBridge/platformio.ini +26 -0
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +216 -0
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +522 -0
- package/examples/mqttStatusBridge/platformio.ini +26 -0
- package/examples/mqttTopologyTest/README.md +467 -0
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +748 -0
- package/examples/mqttTopologyTest/platformio.ini +26 -0
- package/examples/namedMesh/namedMesh.ino +97 -97
- package/examples/namedMesh/platformio.ini +25 -25
- package/examples/otaReceiver/otaReceiver.ino +79 -79
- package/examples/otaReceiver/platformio.ini +25 -25
- package/examples/otaSender/otaSender.ino +160 -151
- package/examples/otaSender/platformio.ini +25 -25
- package/examples/startHere/platformio.ini +25 -25
- package/examples/startHere/startHere.ino +159 -159
- package/examples/webServer/platformio.ini +27 -27
- package/examples/webServer/webServer.ino +89 -89
- package/keywords.txt +48 -48
- package/library.json +55 -34
- package/library.properties +10 -10
- package/package.json +86 -78
- package/src/AlteriomPainlessMesh.h +97 -97
- package/src/arduino/wifi.hpp +365 -365
- package/src/boost/asynctcp.hpp +279 -279
- package/src/painlessMesh.h +70 -70
- package/src/painlessMeshSTA.cpp +236 -236
- package/src/painlessMeshSTA.h +58 -58
- package/src/painlessTaskOptions.h +4 -4
- package/src/painlessmesh/base64.hpp +111 -111
- package/src/painlessmesh/buffer.hpp +229 -229
- package/src/painlessmesh/callback.hpp +91 -91
- package/src/painlessmesh/configuration.hpp +77 -77
- package/src/painlessmesh/connection.hpp +192 -192
- package/src/painlessmesh/layout.hpp +188 -188
- package/src/painlessmesh/logger.hpp +158 -158
- package/src/painlessmesh/memory.hpp +119 -119
- package/src/painlessmesh/mesh.hpp +761 -560
- package/src/painlessmesh/metrics.hpp +322 -322
- package/src/painlessmesh/ntp.hpp +263 -263
- package/src/painlessmesh/ota.hpp +582 -553
- package/src/painlessmesh/plugin.hpp +188 -188
- package/src/painlessmesh/protocol.hpp +813 -813
- package/src/painlessmesh/router.hpp +322 -322
- package/src/painlessmesh/tcp.hpp +71 -71
- package/src/painlessmesh/validation.hpp +238 -238
- package/src/plugin/performance.hpp +214 -214
- package/src/plugin/remote.hpp +64 -64
- package/src/scheduler.cpp +10 -10
- 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
|
-
|
|
14
|
-
#define
|
|
15
|
-
#define
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
void
|
|
26
|
-
void
|
|
27
|
-
void
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Task
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
mesh.
|
|
40
|
-
mesh.
|
|
41
|
-
mesh.
|
|
42
|
-
mesh.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
sensorData
|
|
61
|
-
sensorData.
|
|
62
|
-
sensorData.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
sensorData.
|
|
69
|
-
sensorData.
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
sensorData.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
status
|
|
88
|
-
status.
|
|
89
|
-
status.
|
|
90
|
-
status.
|
|
91
|
-
status.
|
|
92
|
-
status.
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
receivedSensor.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
receivedStatus.
|
|
142
|
-
receivedStatus.
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
}
|