@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.
- package/BRIDGE_TO_INTERNET.md +229 -0
- package/CHANGELOG.md +89 -1
- package/CONTRIBUTING.md +79 -0
- package/README.md +70 -143
- package/docs/README.md +1 -0
- package/docs/api/shared-gateway.md +1207 -0
- package/docs/troubleshooting/common-issues.md +28 -0
- package/docs/troubleshooting/faq.md +113 -12
- package/examples/basic/test/simulator/CMakeLists.txt +40 -0
- package/examples/basic/test/simulator/README.md +149 -0
- package/examples/basic/test/simulator/firmware/basic_firmware.hpp +117 -0
- package/examples/basic/test/simulator/scenarios/basic_mesh_test.yaml +81 -0
- package/examples/bridge/bridge.ino +17 -4
- package/examples/bridge_failover/README.md +81 -0
- package/examples/bridge_failover/bridge_failover.ino +51 -6
- package/examples/sharedGateway/README.md +235 -0
- package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
- package/examples/sharedGateway/sharedGateway.ino +303 -0
- package/library.json +3 -22
- package/library.properties +1 -1
- package/package.json +3 -3
- package/src/arduino/wifi.hpp +380 -13
- package/src/painlessmesh/gateway.hpp +2120 -0
- package/src/painlessmesh/mesh.hpp +1034 -6
- package/src/painlessmesh/message_tracker.hpp +311 -0
- package/src/painlessmesh/protocol.hpp +6 -0
- package/DOCUMENTATION_INDEX.md +0 -146
- package/docs/API_DESIGN_GUIDELINES.md +0 -414
- package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
- package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
- package/docs/BRIDGE_FAILOVER.md +0 -512
- package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
- package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
- package/docs/CREATE_MISSING_RELEASES.md +0 -321
- package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
- package/docs/FAQ_VERSION_NUMBERS.md +0 -152
- package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
- package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
- package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
- package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
- package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
- package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
- package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
- package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
- package/docs/PHASE1_GUIDE.md +0 -349
- package/docs/PHASE2_GUIDE.md +0 -543
- package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
- package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
- package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
- package/docs/VERSION_MANAGEMENT.md +0 -213
- package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
- package/docs/archive/FEATURE_PROPOSALS.md +0 -337
- package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
- package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
- package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
- package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
- package/docs/archive/RELEASE_SUMMARY.md +0 -173
- package/docs/archive/SCONS_BUILD_FIX.md +0 -313
- package/docs/archive/TRIGGER_RELEASE.md +0 -280
- package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
- package/docs/archive/ota-and-status-enhancements.md +0 -911
- package/docs/archive/ota-status-architecture-diagrams.md +0 -658
- package/docs/archive/ota-status-quick-reference.md +0 -284
- package/docs/design/.gitkeep +0 -1
- package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
- package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
- package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
- package/docs/development/DOCKER_TESTING.md +0 -196
- package/docs/development/PLATFORMIO_USAGE.md +0 -180
- package/docs/development/TESTING_SUMMARY.md +0 -126
- package/docs/development/contributing.md +0 -301
- package/docs/development/documentation.md +0 -583
- package/docs/features/DIAGNOSTICS_API.md +0 -534
- package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
- package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
- package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
- package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
- package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
- package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
- package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
- package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
- package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
- package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
- package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
- package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
- package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
- package/docs/improvements/README.md +0 -212
- package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
- package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
- package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
- package/docs/internal/ISSUE_66_STATUS.md +0 -316
- package/docs/internal/PR_SUMMARY.md +0 -315
- package/docs/internal/REVIEW_SUMMARY.md +0 -332
- package/docs/multi-bridge-setup.md +0 -1025
- package/docs/platformio-publishing.md +0 -255
- package/docs/platformio-setup-summary.md +0 -121
- package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
- package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
- package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
- package/docs/releases/FEATURE_HISTORY.md +0 -543
- package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
- package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
- package/docs/releases/PATCH_v1.7.2.md +0 -262
- package/docs/releases/PATCH_v1.7.3.md +0 -262
- package/docs/releases/PATCH_v1.7.4.md +0 -219
- package/docs/releases/PHASE1_SUMMARY.md +0 -246
- package/docs/releases/PHASE2_SUMMARY.md +0 -499
- package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
- package/docs/releases/QUICK_START_RELEASES.md +0 -113
- package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
- package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
- package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
- package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
- package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
- package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
- package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
- package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
- package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
- package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
- package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
- package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
- package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
- package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
- package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
- package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
- package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
- package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
- package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
- package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
- package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
- package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
- package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
- package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
- package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
- package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
- package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
- package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
- package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
- package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
- package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
- package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
- package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
- package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
- package/docs/troubleshooting/station-reconnection-issues.md +0 -172
- package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
- package/docs/wiki/API-Reference.md +0 -246
- package/docs/wiki/Complete-Documentation.md +0 -123
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
- package/examples/alteriomImproved/platformio.ini +0 -32
- package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
- package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
- package/examples/alteriomMetricsHealth/platformio.ini +0 -26
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase1/phase1_features.ino +0 -242
- package/examples/alteriomPhase1/platformio.ini +0 -26
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
- package/examples/alteriomPhase2/phase2_features.ino +0 -186
- package/examples/alteriomPhase2/platformio.ini +0 -26
- package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/alteriomSensorNode/platformio.ini +0 -26
- package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
- package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
- package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
- package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
- package/examples/bridge/mesh_event_publisher.hpp +0 -253
- package/examples/bridge/mesh_topology_reporter.hpp +0 -303
- package/examples/bridge/mqtt_command_bridge.hpp +0 -459
- package/examples/bridge/mqtt_status_bridge.hpp +0 -519
- package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
- package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
- package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
- package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
- package/examples/diagnosticsExample/platformio.ini +0 -26
- package/examples/echoNode/echoNode.ino +0 -33
- package/examples/echoNode/platformio.ini +0 -26
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
- package/examples/meshCommandNode/meshCommandNode.ino +0 -265
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
- package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
- package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
- package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
- package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
- package/examples/mqttCommandBridge/platformio.ini +0 -27
- package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
- package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
- package/examples/mqttStatusBridge/platformio.ini +0 -27
- package/examples/mqttTopologyTest/README.md +0 -467
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
- package/examples/mqttTopologyTest/platformio.ini +0 -27
- package/examples/multi_bridge/README.md +0 -346
- package/examples/multi_bridge/primary_bridge.ino +0 -96
- package/examples/multi_bridge/regular_node.ino +0 -141
- package/examples/multi_bridge/secondary_bridge.ino +0 -111
- package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
- package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
- package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
- package/examples/queued_alarms/README.md +0 -390
- package/examples/queued_alarms/queued_alarms.ino +0 -265
- package/examples/routing_demo/README.md +0 -172
- package/examples/routing_demo/routing_demo.ino +0 -102
- package/examples/rtcIntegration/README.md +0 -294
- package/examples/rtcIntegration/rtcIntegration.ino +0 -210
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
# API Reference
|
|
2
|
-
|
|
3
|
-
This page contains the complete API reference for the Alteriom painlessMesh Library.
|
|
4
|
-
|
|
5
|
-
## Core Classes
|
|
6
|
-
|
|
7
|
-
### painlessMesh
|
|
8
|
-
|
|
9
|
-
The main class for creating and managing mesh networks.
|
|
10
|
-
|
|
11
|
-
#### Initialization Methods
|
|
12
|
-
|
|
13
|
-
```cpp
|
|
14
|
-
void init(String ssid, String password, Scheduler *baseScheduler, uint16_t port = 5555);
|
|
15
|
-
void setDebugMsgTypes(uint16_t types);
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
#### Network Management
|
|
19
|
-
|
|
20
|
-
```cpp
|
|
21
|
-
void update(); // Call in loop()
|
|
22
|
-
bool sendBroadcast(String &msg); // Send to all nodes
|
|
23
|
-
bool sendSingle(uint32_t &destId, String &msg); // Send to specific node
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
#### Event Callbacks
|
|
27
|
-
|
|
28
|
-
```cpp
|
|
29
|
-
void onReceive(std::function<void(uint32_t from, String &msg)> cb);
|
|
30
|
-
void onNewConnection(std::function<void(uint32_t nodeId)> cb);
|
|
31
|
-
void onChangedConnections(std::function<void()> cb);
|
|
32
|
-
void onNodeTimeAdjusted(std::function<void(int32_t offset)> cb);
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
#### Node Information
|
|
36
|
-
|
|
37
|
-
```cpp
|
|
38
|
-
uint32_t getNodeId(); // Get this node's ID
|
|
39
|
-
std::list<uint32_t> getNodeList(); // Get all connected nodes
|
|
40
|
-
uint32_t getNodeTime(); // Get synchronized time
|
|
41
|
-
size_t connectionCount(); // Number of direct connections
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
## Alteriom Extensions
|
|
45
|
-
|
|
46
|
-
### SensorPackage (Type 200)
|
|
47
|
-
|
|
48
|
-
Environmental data collection package for sensor networks.
|
|
49
|
-
|
|
50
|
-
```cpp
|
|
51
|
-
class SensorPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
52
|
-
public:
|
|
53
|
-
uint32_t sensorId = 0; // Unique sensor identifier
|
|
54
|
-
uint32_t timestamp = 0; // Unix timestamp
|
|
55
|
-
double temperature = 0.0; // Temperature in Celsius
|
|
56
|
-
double humidity = 0.0; // Relative humidity (0-100%)
|
|
57
|
-
double pressure = 0.0; // Atmospheric pressure in hPa
|
|
58
|
-
uint8_t batteryLevel = 0; // Battery level (0-100%)
|
|
59
|
-
|
|
60
|
-
// Constructors
|
|
61
|
-
SensorPackage();
|
|
62
|
-
SensorPackage(JsonObject jsonObj);
|
|
63
|
-
|
|
64
|
-
// Serialization
|
|
65
|
-
JsonObject addTo(JsonObject&& jsonObj) const;
|
|
66
|
-
size_t jsonObjectSize() const;
|
|
67
|
-
};
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
**Usage Example:**
|
|
71
|
-
```cpp
|
|
72
|
-
SensorPackage sensor;
|
|
73
|
-
sensor.sensorId = mesh.getNodeId();
|
|
74
|
-
sensor.timestamp = mesh.getNodeTime();
|
|
75
|
-
sensor.temperature = 23.5;
|
|
76
|
-
sensor.humidity = 65.0;
|
|
77
|
-
sensor.pressure = 1013.25;
|
|
78
|
-
sensor.batteryLevel = 85;
|
|
79
|
-
|
|
80
|
-
// Send as broadcast
|
|
81
|
-
auto variant = painlessmesh::protocol::Variant(&sensor);
|
|
82
|
-
String message;
|
|
83
|
-
variant.printTo(message);
|
|
84
|
-
mesh.sendBroadcast(message);
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
### CommandPackage (Type 400)
|
|
88
|
-
|
|
89
|
-
Device control and automation commands for remote node management.
|
|
90
|
-
|
|
91
|
-
```cpp
|
|
92
|
-
class CommandPackage : public painlessmesh::plugin::SinglePackage {
|
|
93
|
-
public:
|
|
94
|
-
uint8_t command = 0; // Command type identifier
|
|
95
|
-
uint32_t targetDevice = 0; // Target node ID
|
|
96
|
-
uint32_t commandId = 0; // Unique command identifier
|
|
97
|
-
TSTRING parameters = ""; // JSON parameters string
|
|
98
|
-
|
|
99
|
-
// Constructors
|
|
100
|
-
CommandPackage();
|
|
101
|
-
CommandPackage(JsonObject jsonObj);
|
|
102
|
-
|
|
103
|
-
// Serialization
|
|
104
|
-
JsonObject addTo(JsonObject&& jsonObj) const;
|
|
105
|
-
size_t jsonObjectSize() const;
|
|
106
|
-
};
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Usage Example:**
|
|
110
|
-
```cpp
|
|
111
|
-
CommandPackage cmd;
|
|
112
|
-
cmd.dest = targetNodeId;
|
|
113
|
-
cmd.command = 1; // LED control
|
|
114
|
-
cmd.targetDevice = targetNodeId;
|
|
115
|
-
cmd.commandId = millis();
|
|
116
|
-
cmd.parameters = "{\"state\":\"ON\",\"brightness\":75}";
|
|
117
|
-
|
|
118
|
-
// Send to specific node
|
|
119
|
-
auto variant = painlessmesh::protocol::Variant(&cmd);
|
|
120
|
-
String message;
|
|
121
|
-
variant.printTo(message);
|
|
122
|
-
mesh.sendSingle(targetNodeId, message);
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
### StatusPackage (Type 202)
|
|
126
|
-
|
|
127
|
-
Health monitoring and system status reporting for network diagnostics.
|
|
128
|
-
|
|
129
|
-
```cpp
|
|
130
|
-
class StatusPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
131
|
-
public:
|
|
132
|
-
uint8_t deviceStatus = 0; // Device status flags
|
|
133
|
-
uint32_t uptime = 0; // Uptime in seconds
|
|
134
|
-
uint16_t freeMemory = 0; // Free memory in KB
|
|
135
|
-
uint8_t wifiStrength = 0; // WiFi signal strength (0-100)
|
|
136
|
-
TSTRING firmwareVersion = ""; // Firmware version string
|
|
137
|
-
|
|
138
|
-
// Constructors
|
|
139
|
-
StatusPackage();
|
|
140
|
-
StatusPackage(JsonObject jsonObj);
|
|
141
|
-
|
|
142
|
-
// Serialization
|
|
143
|
-
JsonObject addTo(JsonObject&& jsonObj) const;
|
|
144
|
-
size_t jsonObjectSize() const;
|
|
145
|
-
};
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**Usage Example:**
|
|
149
|
-
```cpp
|
|
150
|
-
StatusPackage status;
|
|
151
|
-
status.deviceStatus = 0x01; // Operational
|
|
152
|
-
status.uptime = millis() / 1000;
|
|
153
|
-
status.freeMemory = ESP.getFreeHeap() / 1024;
|
|
154
|
-
status.wifiStrength = 75;
|
|
155
|
-
status.firmwareVersion = "1.6.1-alteriom";
|
|
156
|
-
|
|
157
|
-
// Broadcast status
|
|
158
|
-
auto variant = painlessmesh::protocol::Variant(&status);
|
|
159
|
-
String message;
|
|
160
|
-
variant.printTo(message);
|
|
161
|
-
mesh.sendBroadcast(message);
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
## Message Handling
|
|
165
|
-
|
|
166
|
-
### Receiving Messages
|
|
167
|
-
|
|
168
|
-
```cpp
|
|
169
|
-
void receivedCallback(uint32_t from, String& msg) {
|
|
170
|
-
DynamicJsonDocument doc(1024);
|
|
171
|
-
deserializeJson(doc, msg);
|
|
172
|
-
JsonObject obj = doc.as<JsonObject>();
|
|
173
|
-
uint8_t msgType = obj["type"];
|
|
174
|
-
|
|
175
|
-
switch(msgType) {
|
|
176
|
-
case 200: // SensorPackage
|
|
177
|
-
handleSensorData(alteriom::SensorPackage(obj), from);
|
|
178
|
-
break;
|
|
179
|
-
case 400: // CommandPackage
|
|
180
|
-
handleCommand(alteriom::CommandPackage(obj), from);
|
|
181
|
-
break;
|
|
182
|
-
case 202: // StatusPackage
|
|
183
|
-
handleStatus(alteriom::StatusPackage(obj), from);
|
|
184
|
-
break;
|
|
185
|
-
default:
|
|
186
|
-
Serial.printf("Unknown message type: %d\n", msgType);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### Debug Message Types
|
|
192
|
-
|
|
193
|
-
```cpp
|
|
194
|
-
// Debug levels (can be combined with |)
|
|
195
|
-
#define ERROR 0x00000001
|
|
196
|
-
#define STARTUP 0x00000002
|
|
197
|
-
#define CONNECTION 0x00000004
|
|
198
|
-
#define SYNC 0x00000008
|
|
199
|
-
#define COMMUNICATION 0x00000010
|
|
200
|
-
#define GENERAL 0x00000020
|
|
201
|
-
#define MSG_TYPES 0x00000040
|
|
202
|
-
#define REMOTE 0x00000080
|
|
203
|
-
|
|
204
|
-
// Usage
|
|
205
|
-
mesh.setDebugMsgTypes(ERROR | STARTUP | CONNECTION);
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
## Platform Constants
|
|
209
|
-
|
|
210
|
-
### Memory Constraints
|
|
211
|
-
- **ESP32**: ~320KB RAM available
|
|
212
|
-
- **ESP8266**: ~80KB RAM available
|
|
213
|
-
- **MAX_CONN**: Typically 4-10 connections depending on platform
|
|
214
|
-
|
|
215
|
-
### Network Limits
|
|
216
|
-
- **Message Size**: Recommended max 4KB
|
|
217
|
-
- **String Length**: Recommended max 256 characters for compatibility
|
|
218
|
-
- **Network Delay**: ~50-200ms typical mesh routing delay
|
|
219
|
-
|
|
220
|
-
## Error Handling
|
|
221
|
-
|
|
222
|
-
### Common Return Values
|
|
223
|
-
- **`true`**: Operation successful
|
|
224
|
-
- **`false`**: Operation failed (check network/memory)
|
|
225
|
-
|
|
226
|
-
### Best Practices
|
|
227
|
-
```cpp
|
|
228
|
-
// Always check return values
|
|
229
|
-
if (!mesh.sendBroadcast(message)) {
|
|
230
|
-
Serial.println("Failed to send message");
|
|
231
|
-
// Implement retry logic or error handling
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Monitor connection changes
|
|
235
|
-
void changedConnectionCallback() {
|
|
236
|
-
auto nodeList = mesh.getNodeList();
|
|
237
|
-
Serial.printf("Network size: %d nodes\n", nodeList.size() + 1);
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
## See Also
|
|
242
|
-
|
|
243
|
-
- [Installation Guide](Installation)
|
|
244
|
-
- [Examples](Examples)
|
|
245
|
-
- [GitHub Repository](https://github.com/Alteriom/painlessMesh)
|
|
246
|
-
- [Release Notes](https://github.com/Alteriom/painlessMesh/releases)
|
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
# Complete Documentation
|
|
2
|
-
|
|
3
|
-
Welcome to the complete documentation for Alteriom painlessMesh Library!
|
|
4
|
-
|
|
5
|
-
## 📖 Documentation Sections
|
|
6
|
-
|
|
7
|
-
### Getting Started
|
|
8
|
-
- [Installation Guide](Installation) - Set up the library in your development environment
|
|
9
|
-
- [Quick Start](https://github.com/Alteriom/painlessMesh/blob/main/docs/getting-started/quickstart.md) - Your first mesh network
|
|
10
|
-
- [First Mesh Tutorial](https://github.com/Alteriom/painlessMesh/blob/main/docs/getting-started/first-mesh.md) - Step-by-step guide
|
|
11
|
-
|
|
12
|
-
### API Documentation
|
|
13
|
-
- [API Reference](API-Reference) - Complete class and method documentation
|
|
14
|
-
- [Core API](https://github.com/Alteriom/painlessMesh/blob/main/docs/api/core-api.md) - painlessMesh core functionality
|
|
15
|
-
- [Plugin System](https://github.com/Alteriom/painlessMesh/blob/main/docs/architecture/plugin-system.md) - Extensible architecture
|
|
16
|
-
|
|
17
|
-
### Examples and Tutorials
|
|
18
|
-
- [Examples](Examples) - Working code examples
|
|
19
|
-
- [Basic Examples](https://github.com/Alteriom/painlessMesh/blob/main/docs/tutorials/basic-examples.md) - Fundamental usage patterns
|
|
20
|
-
- [Alteriom Extensions](https://github.com/Alteriom/painlessMesh/blob/main/docs/alteriom/overview.md) - SensorPackage, CommandPackage, StatusPackage
|
|
21
|
-
|
|
22
|
-
### Architecture
|
|
23
|
-
- [Mesh Architecture](https://github.com/Alteriom/painlessMesh/blob/main/docs/architecture/mesh-architecture.md) - How the mesh network works
|
|
24
|
-
- [Plugin System](https://github.com/Alteriom/painlessMesh/blob/main/docs/architecture/plugin-system.md) - Extensible package system
|
|
25
|
-
|
|
26
|
-
### Troubleshooting
|
|
27
|
-
- [FAQ](https://github.com/Alteriom/painlessMesh/blob/main/docs/troubleshooting/faq.md) - Frequently asked questions
|
|
28
|
-
- [Common Issues](https://github.com/Alteriom/painlessMesh/blob/main/docs/troubleshooting/common-issues.md) - Solutions to common problems
|
|
29
|
-
|
|
30
|
-
### Development
|
|
31
|
-
- [Contributing Guidelines](Contributing) - How to contribute to the project
|
|
32
|
-
- [Release Guide](https://github.com/Alteriom/painlessMesh/blob/main/RELEASE_GUIDE.md) - Release process documentation
|
|
33
|
-
|
|
34
|
-
## 🚀 Quick Links
|
|
35
|
-
|
|
36
|
-
### Installation
|
|
37
|
-
```bash
|
|
38
|
-
# Arduino Library Manager
|
|
39
|
-
Tools → Manage Libraries → Search "Alteriom PainlessMesh"
|
|
40
|
-
|
|
41
|
-
# PlatformIO
|
|
42
|
-
lib_deps = alteriom/painlessMesh@^1.6.1
|
|
43
|
-
|
|
44
|
-
# NPM
|
|
45
|
-
npm install @alteriom/painlessmesh
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
### Basic Usage
|
|
49
|
-
```cpp
|
|
50
|
-
#include "painlessMesh.h"
|
|
51
|
-
|
|
52
|
-
#define MESH_PREFIX "YourMeshName"
|
|
53
|
-
#define MESH_PASSWORD "YourPassword"
|
|
54
|
-
#define MESH_PORT 5555
|
|
55
|
-
|
|
56
|
-
Scheduler userScheduler;
|
|
57
|
-
painlessMesh mesh;
|
|
58
|
-
|
|
59
|
-
void setup() {
|
|
60
|
-
Serial.begin(115200);
|
|
61
|
-
mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
|
|
62
|
-
mesh.onReceive([](uint32_t from, String& msg) {
|
|
63
|
-
Serial.printf("Received: %s from %u\n", msg.c_str(), from);
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
void loop() {
|
|
68
|
-
mesh.update();
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## 📦 Package Types
|
|
73
|
-
|
|
74
|
-
### SensorPackage (Type 200)
|
|
75
|
-
For environmental sensor data collection:
|
|
76
|
-
- Temperature, humidity, pressure measurements
|
|
77
|
-
- Battery level monitoring
|
|
78
|
-
- Timestamp synchronization
|
|
79
|
-
|
|
80
|
-
### CommandPackage (Type 400)
|
|
81
|
-
For device control and automation:
|
|
82
|
-
- Remote device commands
|
|
83
|
-
- Parameter passing via JSON
|
|
84
|
-
- Command acknowledgment tracking
|
|
85
|
-
|
|
86
|
-
### StatusPackage (Type 202)
|
|
87
|
-
For system health monitoring:
|
|
88
|
-
- Device operational status
|
|
89
|
-
- Memory usage tracking
|
|
90
|
-
- Network connectivity metrics
|
|
91
|
-
|
|
92
|
-
## 🌟 Key Features
|
|
93
|
-
|
|
94
|
-
- **Automatic Mesh Formation** - Nodes discover and connect automatically
|
|
95
|
-
- **JSON-Based Messaging** - Easy to use and extend
|
|
96
|
-
- **Time Synchronization** - Coordinated behaviors across nodes
|
|
97
|
-
- **Multi-Platform Support** - ESP32, ESP8266
|
|
98
|
-
- **Alteriom Extensions** - Enhanced packages for common use cases
|
|
99
|
-
- **Comprehensive Testing** - Full CI/CD pipeline with automated testing
|
|
100
|
-
|
|
101
|
-
## 📚 External Resources
|
|
102
|
-
|
|
103
|
-
- **GitHub Repository**: https://github.com/Alteriom/painlessMesh
|
|
104
|
-
- **NPM Package**: https://www.npmjs.com/package/@alteriom/painlessmesh
|
|
105
|
-
- **PlatformIO Registry**: https://registry.platformio.org/libraries/alteriom/painlessMesh
|
|
106
|
-
- **Issue Tracker**: https://github.com/Alteriom/painlessMesh/issues
|
|
107
|
-
- **Discussions**: https://github.com/Alteriom/painlessMesh/discussions
|
|
108
|
-
|
|
109
|
-
## 📝 License
|
|
110
|
-
|
|
111
|
-
This project is licensed under LGPL-3.0 - see the [LICENSE](https://github.com/Alteriom/painlessMesh/blob/main/LICENSE) file for details.
|
|
112
|
-
|
|
113
|
-
## 🤝 Contributing
|
|
114
|
-
|
|
115
|
-
We welcome contributions! Please see our [Contributing Guidelines](Contributing) for details on:
|
|
116
|
-
- Code style and standards
|
|
117
|
-
- Pull request process
|
|
118
|
-
- Issue reporting
|
|
119
|
-
- Feature requests
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
**Need Help?** Check the [FAQ](https://github.com/Alteriom/painlessMesh/blob/main/docs/troubleshooting/faq.md) or [open an issue](https://github.com/Alteriom/painlessMesh/issues).
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
#ifndef ALTERIOM_SENSOR_PACKAGE_HPP
|
|
2
|
-
#define ALTERIOM_SENSOR_PACKAGE_HPP
|
|
3
|
-
|
|
4
|
-
#include "painlessmesh/plugin.hpp"
|
|
5
|
-
|
|
6
|
-
namespace alteriom {
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @brief Sensor data package for broadcasting environmental measurements
|
|
10
|
-
*
|
|
11
|
-
* This package is designed for Alteriom's IoT sensor network requirements,
|
|
12
|
-
* allowing nodes to share environmental data across the mesh.
|
|
13
|
-
*/
|
|
14
|
-
class SensorPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
15
|
-
public:
|
|
16
|
-
double temperature = 0.0; // Temperature in Celsius
|
|
17
|
-
double humidity = 0.0; // Relative humidity percentage
|
|
18
|
-
double pressure = 0.0; // Atmospheric pressure in hPa
|
|
19
|
-
uint32_t sensorId = 0; // Unique sensor identifier
|
|
20
|
-
uint32_t timestamp = 0; // Unix timestamp of measurement
|
|
21
|
-
uint8_t batteryLevel = 0; // Battery level percentage
|
|
22
|
-
|
|
23
|
-
SensorPackage()
|
|
24
|
-
: BroadcastPackage(200) {} // Type ID 200 for Alteriom sensors
|
|
25
|
-
|
|
26
|
-
SensorPackage(JsonObject jsonObj) : BroadcastPackage(jsonObj) {
|
|
27
|
-
temperature = jsonObj["temp"];
|
|
28
|
-
humidity = jsonObj["hum"];
|
|
29
|
-
pressure = jsonObj["press"];
|
|
30
|
-
sensorId = jsonObj["sid"];
|
|
31
|
-
timestamp = jsonObj["ts"];
|
|
32
|
-
batteryLevel = jsonObj["bat"];
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
JsonObject addTo(JsonObject&& jsonObj) const {
|
|
36
|
-
jsonObj = BroadcastPackage::addTo(std::move(jsonObj));
|
|
37
|
-
jsonObj["temp"] = temperature;
|
|
38
|
-
jsonObj["hum"] = humidity;
|
|
39
|
-
jsonObj["press"] = pressure;
|
|
40
|
-
jsonObj["sid"] = sensorId;
|
|
41
|
-
jsonObj["ts"] = timestamp;
|
|
42
|
-
jsonObj["bat"] = batteryLevel;
|
|
43
|
-
return jsonObj;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
47
|
-
size_t jsonObjectSize() const { return JSON_OBJECT_SIZE(noJsonFields + 6); }
|
|
48
|
-
#endif
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* @brief Command package for controlling Alteriom devices
|
|
53
|
-
*
|
|
54
|
-
* Single-destination package for sending specific commands to individual nodes.
|
|
55
|
-
*/
|
|
56
|
-
class CommandPackage : public painlessmesh::plugin::SinglePackage {
|
|
57
|
-
public:
|
|
58
|
-
uint8_t command = 0; // Command type
|
|
59
|
-
uint32_t targetDevice = 0; // Target device ID
|
|
60
|
-
TSTRING parameters = ""; // Command parameters as JSON string
|
|
61
|
-
uint32_t commandId = 0; // Unique command identifier for tracking
|
|
62
|
-
|
|
63
|
-
CommandPackage() : SinglePackage(400) {} // Type ID 201 for Alteriom commands
|
|
64
|
-
|
|
65
|
-
CommandPackage(JsonObject jsonObj) : SinglePackage(jsonObj) {
|
|
66
|
-
command = jsonObj["cmd"];
|
|
67
|
-
targetDevice = jsonObj["target"];
|
|
68
|
-
parameters = jsonObj["params"].as<TSTRING>();
|
|
69
|
-
commandId = jsonObj["cid"];
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
JsonObject addTo(JsonObject&& jsonObj) const {
|
|
73
|
-
jsonObj = SinglePackage::addTo(std::move(jsonObj));
|
|
74
|
-
jsonObj["cmd"] = command;
|
|
75
|
-
jsonObj["target"] = targetDevice;
|
|
76
|
-
jsonObj["params"] = parameters;
|
|
77
|
-
jsonObj["cid"] = commandId;
|
|
78
|
-
return jsonObj;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
82
|
-
size_t jsonObjectSize() const {
|
|
83
|
-
return JSON_OBJECT_SIZE(noJsonFields + 4) + parameters.length();
|
|
84
|
-
}
|
|
85
|
-
#endif
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* @brief Status report package for device health monitoring
|
|
90
|
-
*/
|
|
91
|
-
class StatusPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
92
|
-
public:
|
|
93
|
-
uint8_t deviceStatus = 0; // Device status flags
|
|
94
|
-
uint32_t uptime = 0; // Device uptime in seconds
|
|
95
|
-
uint16_t freeMemory = 0; // Free memory in KB
|
|
96
|
-
uint8_t wifiStrength = 0; // WiFi signal strength
|
|
97
|
-
TSTRING firmwareVersion = ""; // Current firmware version
|
|
98
|
-
|
|
99
|
-
StatusPackage() : BroadcastPackage(202) {} // Type ID 202 for Alteriom status
|
|
100
|
-
|
|
101
|
-
StatusPackage(JsonObject jsonObj) : BroadcastPackage(jsonObj) {
|
|
102
|
-
deviceStatus = jsonObj["status"];
|
|
103
|
-
uptime = jsonObj["uptime"];
|
|
104
|
-
freeMemory = jsonObj["mem"];
|
|
105
|
-
wifiStrength = jsonObj["wifi"];
|
|
106
|
-
firmwareVersion = jsonObj["fw"].as<TSTRING>();
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
JsonObject addTo(JsonObject&& jsonObj) const {
|
|
110
|
-
jsonObj = BroadcastPackage::addTo(std::move(jsonObj));
|
|
111
|
-
jsonObj["status"] = deviceStatus;
|
|
112
|
-
jsonObj["uptime"] = uptime;
|
|
113
|
-
jsonObj["mem"] = freeMemory;
|
|
114
|
-
jsonObj["wifi"] = wifiStrength;
|
|
115
|
-
jsonObj["fw"] = firmwareVersion;
|
|
116
|
-
return jsonObj;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
120
|
-
size_t jsonObjectSize() const {
|
|
121
|
-
return JSON_OBJECT_SIZE(noJsonFields + 5) + firmwareVersion.length();
|
|
122
|
-
}
|
|
123
|
-
#endif
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* @brief Enhanced status package with comprehensive health metrics (Phase 1)
|
|
128
|
-
*
|
|
129
|
-
* This is an extended version of StatusPackage that includes additional
|
|
130
|
-
* mesh statistics, performance metrics, and alerting capabilities.
|
|
131
|
-
* Type ID 203 is used to distinguish from the basic StatusPackage (202).
|
|
132
|
-
*/
|
|
133
|
-
class EnhancedStatusPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
134
|
-
public:
|
|
135
|
-
// Device Health (from original StatusPackage)
|
|
136
|
-
uint8_t deviceStatus = 0; // Device status flags
|
|
137
|
-
uint32_t uptime = 0; // Device uptime in seconds
|
|
138
|
-
uint16_t freeMemory = 0; // Free memory in KB
|
|
139
|
-
uint8_t wifiStrength = 0; // WiFi signal strength
|
|
140
|
-
TSTRING firmwareVersion = ""; // Current firmware version
|
|
141
|
-
TSTRING firmwareMD5 = ""; // Firmware hash for OTA verification
|
|
142
|
-
|
|
143
|
-
// Mesh Statistics
|
|
144
|
-
uint16_t nodeCount = 0; // Number of known nodes in mesh
|
|
145
|
-
uint8_t connectionCount = 0; // Number of direct connections
|
|
146
|
-
uint32_t messagesReceived = 0; // Total messages received
|
|
147
|
-
uint32_t messagesSent = 0; // Total messages sent
|
|
148
|
-
uint32_t messagesDropped = 0; // Total messages dropped/failed
|
|
149
|
-
|
|
150
|
-
// Performance Metrics
|
|
151
|
-
uint16_t avgLatency = 0; // Average message latency in ms
|
|
152
|
-
uint8_t packetLossRate = 0; // Packet loss rate percentage (0-100)
|
|
153
|
-
uint16_t throughput = 0; // Network throughput in bytes/sec
|
|
154
|
-
|
|
155
|
-
// Warnings/Alerts
|
|
156
|
-
uint8_t alertFlags = 0; // Bit flags for various alert conditions
|
|
157
|
-
TSTRING lastError = ""; // Last error message for diagnostics
|
|
158
|
-
|
|
159
|
-
EnhancedStatusPackage()
|
|
160
|
-
: BroadcastPackage(203) {} // Type ID 203 for enhanced status
|
|
161
|
-
|
|
162
|
-
EnhancedStatusPackage(JsonObject jsonObj) : BroadcastPackage(jsonObj) {
|
|
163
|
-
deviceStatus = jsonObj["status"];
|
|
164
|
-
uptime = jsonObj["uptime"];
|
|
165
|
-
freeMemory = jsonObj["mem"];
|
|
166
|
-
wifiStrength = jsonObj["wifi"];
|
|
167
|
-
firmwareVersion = jsonObj["fw"].as<TSTRING>();
|
|
168
|
-
firmwareMD5 = jsonObj["fwMD5"].as<TSTRING>();
|
|
169
|
-
|
|
170
|
-
nodeCount = jsonObj["nodes"];
|
|
171
|
-
connectionCount = jsonObj["conns"];
|
|
172
|
-
messagesReceived = jsonObj["msgRx"];
|
|
173
|
-
messagesSent = jsonObj["msgTx"];
|
|
174
|
-
messagesDropped = jsonObj["msgDrop"];
|
|
175
|
-
|
|
176
|
-
avgLatency = jsonObj["latency"];
|
|
177
|
-
packetLossRate = jsonObj["loss"];
|
|
178
|
-
throughput = jsonObj["throughput"];
|
|
179
|
-
|
|
180
|
-
alertFlags = jsonObj["alerts"];
|
|
181
|
-
lastError = jsonObj["lastErr"].as<TSTRING>();
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
JsonObject addTo(JsonObject&& jsonObj) const {
|
|
185
|
-
jsonObj = BroadcastPackage::addTo(std::move(jsonObj));
|
|
186
|
-
|
|
187
|
-
// Device Health
|
|
188
|
-
jsonObj["status"] = deviceStatus;
|
|
189
|
-
jsonObj["uptime"] = uptime;
|
|
190
|
-
jsonObj["mem"] = freeMemory;
|
|
191
|
-
jsonObj["wifi"] = wifiStrength;
|
|
192
|
-
jsonObj["fw"] = firmwareVersion;
|
|
193
|
-
jsonObj["fwMD5"] = firmwareMD5;
|
|
194
|
-
|
|
195
|
-
// Mesh Statistics
|
|
196
|
-
jsonObj["nodes"] = nodeCount;
|
|
197
|
-
jsonObj["conns"] = connectionCount;
|
|
198
|
-
jsonObj["msgRx"] = messagesReceived;
|
|
199
|
-
jsonObj["msgTx"] = messagesSent;
|
|
200
|
-
jsonObj["msgDrop"] = messagesDropped;
|
|
201
|
-
|
|
202
|
-
// Performance Metrics
|
|
203
|
-
jsonObj["latency"] = avgLatency;
|
|
204
|
-
jsonObj["loss"] = packetLossRate;
|
|
205
|
-
jsonObj["throughput"] = throughput;
|
|
206
|
-
|
|
207
|
-
// Alerts
|
|
208
|
-
jsonObj["alerts"] = alertFlags;
|
|
209
|
-
jsonObj["lastErr"] = lastError;
|
|
210
|
-
|
|
211
|
-
return jsonObj;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
#if ARDUINOJSON_VERSION_MAJOR < 7
|
|
215
|
-
size_t jsonObjectSize() const {
|
|
216
|
-
return JSON_OBJECT_SIZE(noJsonFields + 18) + firmwareVersion.length() +
|
|
217
|
-
firmwareMD5.length() + lastError.length();
|
|
218
|
-
}
|
|
219
|
-
#endif
|
|
220
|
-
};
|
|
221
|
-
|
|
222
|
-
} // namespace alteriom
|
|
223
|
-
|
|
224
|
-
#endif // ALTERIOM_SENSOR_PACKAGE_HPP
|