@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
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
//************************************************************
|
|
2
|
+
// Shared Gateway Example
|
|
3
|
+
//
|
|
4
|
+
// This example demonstrates the Shared Gateway Mode feature of painlessMesh.
|
|
5
|
+
// Unlike the Bridge Mode where only one node connects to the router,
|
|
6
|
+
// Shared Gateway Mode allows ALL nodes to connect to the same WiFi router
|
|
7
|
+
// while maintaining mesh connectivity.
|
|
8
|
+
//
|
|
9
|
+
// Key Features:
|
|
10
|
+
// - All nodes operate in AP+STA mode simultaneously
|
|
11
|
+
// - All nodes connect to the same WiFi router
|
|
12
|
+
// - Mesh and router operate on the same channel for reliability
|
|
13
|
+
// - Automatic router reconnection if connection is lost
|
|
14
|
+
// - Each node can independently access the Internet
|
|
15
|
+
//
|
|
16
|
+
// Use Cases:
|
|
17
|
+
// - Industrial sensor networks where all nodes are within router range
|
|
18
|
+
// - Smart building systems requiring redundant Internet access
|
|
19
|
+
// - Fish farm monitoring where any node can send critical alarms to cloud
|
|
20
|
+
// - Remote monitoring stations with shared WiFi infrastructure
|
|
21
|
+
//
|
|
22
|
+
// Hardware Requirements:
|
|
23
|
+
// - ESP32 or ESP8266
|
|
24
|
+
// - WiFi router within range of all nodes
|
|
25
|
+
//
|
|
26
|
+
// How It Works:
|
|
27
|
+
// 1. Each node connects to the router to detect its WiFi channel
|
|
28
|
+
// 2. Mesh network is initialized on the same channel as the router
|
|
29
|
+
// 3. Router connection is re-established using stationManual()
|
|
30
|
+
// 4. Periodic monitoring ensures automatic reconnection if router is lost
|
|
31
|
+
//
|
|
32
|
+
// For more details, see docs/design/SHARED_GATEWAY_DESIGN.md
|
|
33
|
+
//
|
|
34
|
+
//************************************************************
|
|
35
|
+
#include "painlessMesh.h"
|
|
36
|
+
|
|
37
|
+
// ============================================
|
|
38
|
+
// Mesh Network Configuration
|
|
39
|
+
// ============================================
|
|
40
|
+
// These settings must match across all nodes in your mesh network
|
|
41
|
+
#define MESH_PREFIX "SharedGatewayMesh" // Mesh network name (SSID prefix)
|
|
42
|
+
#define MESH_PASSWORD "meshPassword123" // Mesh network password
|
|
43
|
+
#define MESH_PORT 5555 // TCP port for mesh communication
|
|
44
|
+
|
|
45
|
+
// ============================================
|
|
46
|
+
// Router Configuration
|
|
47
|
+
// ============================================
|
|
48
|
+
// Configure these to match your WiFi router settings
|
|
49
|
+
// All nodes in the mesh will connect to this same router
|
|
50
|
+
#define ROUTER_SSID "YourRouterSSID" // Your WiFi router name
|
|
51
|
+
#define ROUTER_PASSWORD "YourRouterPassword" // Your WiFi router password
|
|
52
|
+
|
|
53
|
+
// ============================================
|
|
54
|
+
// Task Scheduler and Mesh Instance
|
|
55
|
+
// ============================================
|
|
56
|
+
Scheduler userScheduler;
|
|
57
|
+
painlessMesh mesh;
|
|
58
|
+
|
|
59
|
+
// ============================================
|
|
60
|
+
// Function Prototypes
|
|
61
|
+
// ============================================
|
|
62
|
+
void sendStatusBroadcast();
|
|
63
|
+
void receivedCallback(uint32_t from, String& msg);
|
|
64
|
+
void newConnectionCallback(uint32_t nodeId);
|
|
65
|
+
void changedConnectionCallback();
|
|
66
|
+
void nodeTimeAdjustedCallback(int32_t offset);
|
|
67
|
+
|
|
68
|
+
// ============================================
|
|
69
|
+
// Task Definitions
|
|
70
|
+
// ============================================
|
|
71
|
+
// Task to broadcast status every 10 seconds
|
|
72
|
+
Task taskBroadcastStatus(10000, TASK_FOREVER, &sendStatusBroadcast);
|
|
73
|
+
|
|
74
|
+
// ============================================
|
|
75
|
+
// Callback Functions
|
|
76
|
+
// ============================================
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Send a status broadcast to all nodes in the mesh
|
|
80
|
+
*
|
|
81
|
+
* This demonstrates how data can be shared across the mesh network.
|
|
82
|
+
* In a real application, you might send sensor readings, alarms,
|
|
83
|
+
* or other application-specific data.
|
|
84
|
+
*/
|
|
85
|
+
void sendStatusBroadcast() {
|
|
86
|
+
// Create a JSON status message
|
|
87
|
+
// ArduinoJson v7 uses JsonDocument with automatic sizing
|
|
88
|
+
JsonDocument doc;
|
|
89
|
+
JsonObject obj = doc.to<JsonObject>();
|
|
90
|
+
|
|
91
|
+
// Basic node identification
|
|
92
|
+
obj["nodeId"] = mesh.getNodeId();
|
|
93
|
+
obj["type"] = "status";
|
|
94
|
+
|
|
95
|
+
// Router connection information
|
|
96
|
+
bool routerConnected = (WiFi.status() == WL_CONNECTED);
|
|
97
|
+
obj["routerConnected"] = routerConnected;
|
|
98
|
+
|
|
99
|
+
if (routerConnected) {
|
|
100
|
+
obj["routerIP"] = WiFi.localIP().toString();
|
|
101
|
+
obj["routerRSSI"] = WiFi.RSSI();
|
|
102
|
+
obj["routerChannel"] = WiFi.channel();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// Mesh network information
|
|
106
|
+
obj["meshNodes"] = mesh.getNodeList().size();
|
|
107
|
+
obj["sharedGatewayMode"] = mesh.isSharedGatewayMode();
|
|
108
|
+
|
|
109
|
+
// System health information
|
|
110
|
+
obj["uptime"] = millis() / 1000; // Uptime in seconds
|
|
111
|
+
obj["freeHeap"] = ESP.getFreeHeap();
|
|
112
|
+
|
|
113
|
+
// Serialize and send
|
|
114
|
+
String msg;
|
|
115
|
+
serializeJson(doc, msg);
|
|
116
|
+
|
|
117
|
+
// Broadcast to all mesh nodes
|
|
118
|
+
mesh.sendBroadcast(msg);
|
|
119
|
+
|
|
120
|
+
// Print status to Serial for debugging
|
|
121
|
+
Serial.println("\n========== STATUS BROADCAST ==========");
|
|
122
|
+
Serial.printf("Node ID: %u\n", mesh.getNodeId());
|
|
123
|
+
Serial.printf("Router: %s\n", routerConnected ? "Connected" : "Disconnected");
|
|
124
|
+
if (routerConnected) {
|
|
125
|
+
Serial.printf(" IP: %s\n", WiFi.localIP().toString().c_str());
|
|
126
|
+
Serial.printf(" RSSI: %d dBm\n", WiFi.RSSI());
|
|
127
|
+
Serial.printf(" Channel: %d\n", WiFi.channel());
|
|
128
|
+
}
|
|
129
|
+
Serial.printf("Mesh Nodes: %d\n", mesh.getNodeList().size());
|
|
130
|
+
Serial.printf("Shared Gateway Mode: %s\n", mesh.isSharedGatewayMode() ? "Yes" : "No");
|
|
131
|
+
Serial.printf("Free Heap: %u bytes\n", ESP.getFreeHeap());
|
|
132
|
+
Serial.printf("Uptime: %lu seconds\n", millis() / 1000);
|
|
133
|
+
Serial.println("=======================================\n");
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Callback for received mesh messages
|
|
138
|
+
*
|
|
139
|
+
* @param from The node ID of the sender
|
|
140
|
+
* @param msg The message content (typically JSON)
|
|
141
|
+
*/
|
|
142
|
+
void receivedCallback(uint32_t from, String& msg) {
|
|
143
|
+
Serial.printf("Received from %u: %s\n", from, msg.c_str());
|
|
144
|
+
|
|
145
|
+
// Parse the message to extract useful information
|
|
146
|
+
// ArduinoJson v7 uses JsonDocument with automatic sizing
|
|
147
|
+
JsonDocument doc;
|
|
148
|
+
DeserializationError error = deserializeJson(doc, msg);
|
|
149
|
+
|
|
150
|
+
if (error) {
|
|
151
|
+
Serial.printf("JSON parse error: %s\n", error.c_str());
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Check if this is a status message from another shared gateway node
|
|
156
|
+
if (doc["type"] == "status") {
|
|
157
|
+
bool theirRouterConnected = doc["routerConnected"] | false;
|
|
158
|
+
Serial.printf(" -> Node %u router status: %s\n",
|
|
159
|
+
from, theirRouterConnected ? "Connected" : "Disconnected");
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Callback when a new node joins the mesh
|
|
165
|
+
*
|
|
166
|
+
* @param nodeId The ID of the newly connected node
|
|
167
|
+
*/
|
|
168
|
+
void newConnectionCallback(uint32_t nodeId) {
|
|
169
|
+
Serial.printf("\n✓ New Connection: Node %u joined the mesh\n", nodeId);
|
|
170
|
+
Serial.printf(" Total nodes in mesh: %d\n", mesh.getNodeList().size() + 1);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* Callback when mesh topology changes
|
|
175
|
+
*
|
|
176
|
+
* This is called when nodes join, leave, or when connections are reorganized
|
|
177
|
+
*/
|
|
178
|
+
void changedConnectionCallback() {
|
|
179
|
+
Serial.println("\n⚡ Mesh topology changed");
|
|
180
|
+
|
|
181
|
+
// Print current node list
|
|
182
|
+
auto nodes = mesh.getNodeList();
|
|
183
|
+
Serial.printf("Current mesh contains %d other node(s):\n", nodes.size());
|
|
184
|
+
|
|
185
|
+
SimpleList<uint32_t>::iterator node = nodes.begin();
|
|
186
|
+
while (node != nodes.end()) {
|
|
187
|
+
Serial.printf(" - Node %u\n", *node);
|
|
188
|
+
node++;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Callback when mesh time is synchronized
|
|
194
|
+
*
|
|
195
|
+
* painlessMesh maintains synchronized time across all nodes.
|
|
196
|
+
* This callback is triggered when time adjustments occur.
|
|
197
|
+
*
|
|
198
|
+
* @param offset The time adjustment in microseconds
|
|
199
|
+
*/
|
|
200
|
+
void nodeTimeAdjustedCallback(int32_t offset) {
|
|
201
|
+
Serial.printf("Time synchronized. Offset: %d us\n", offset);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// ============================================
|
|
205
|
+
// Setup Function
|
|
206
|
+
// ============================================
|
|
207
|
+
void setup() {
|
|
208
|
+
Serial.begin(115200);
|
|
209
|
+
|
|
210
|
+
// Wait for serial monitor to connect (useful for debugging)
|
|
211
|
+
delay(1000);
|
|
212
|
+
|
|
213
|
+
Serial.println("\n");
|
|
214
|
+
Serial.println("================================================");
|
|
215
|
+
Serial.println(" painlessMesh - Shared Gateway Example");
|
|
216
|
+
Serial.println("================================================\n");
|
|
217
|
+
|
|
218
|
+
// Configure mesh debugging output
|
|
219
|
+
// Available types: ERROR, STARTUP, MESH_STATUS, CONNECTION, SYNC,
|
|
220
|
+
// COMMUNICATION, GENERAL, MSG_TYPES, REMOTE
|
|
221
|
+
mesh.setDebugMsgTypes(ERROR | STARTUP | CONNECTION);
|
|
222
|
+
|
|
223
|
+
Serial.println("Initializing Shared Gateway Mode...\n");
|
|
224
|
+
Serial.printf(" Mesh SSID: %s\n", MESH_PREFIX);
|
|
225
|
+
Serial.printf(" Mesh Port: %d\n", MESH_PORT);
|
|
226
|
+
Serial.printf(" Router SSID: %s\n", ROUTER_SSID);
|
|
227
|
+
Serial.println("");
|
|
228
|
+
|
|
229
|
+
// ============================================
|
|
230
|
+
// Initialize as Shared Gateway
|
|
231
|
+
// ============================================
|
|
232
|
+
// This method will:
|
|
233
|
+
// 1. Connect to the router to detect its WiFi channel
|
|
234
|
+
// 2. Initialize the mesh network on the same channel
|
|
235
|
+
// 3. Re-establish the router connection
|
|
236
|
+
// 4. Set up automatic router reconnection monitoring
|
|
237
|
+
//
|
|
238
|
+
// All nodes using this mode will be on the same channel as the router,
|
|
239
|
+
// ensuring reliable mesh communication AND router connectivity.
|
|
240
|
+
|
|
241
|
+
bool success = mesh.initAsSharedGateway(
|
|
242
|
+
MESH_PREFIX, // Mesh network name
|
|
243
|
+
MESH_PASSWORD, // Mesh network password
|
|
244
|
+
ROUTER_SSID, // Router SSID to connect to
|
|
245
|
+
ROUTER_PASSWORD, // Router password
|
|
246
|
+
&userScheduler, // Task scheduler for mesh operations
|
|
247
|
+
MESH_PORT // TCP port for mesh communication
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
if (success) {
|
|
251
|
+
Serial.println("✓ Shared Gateway Mode initialized successfully!\n");
|
|
252
|
+
} else {
|
|
253
|
+
Serial.println("✗ Failed to initialize Shared Gateway Mode!");
|
|
254
|
+
Serial.println(" Check your router credentials and ensure router is in range.");
|
|
255
|
+
Serial.println(" The mesh will still operate, but without router connectivity.\n");
|
|
256
|
+
|
|
257
|
+
// Fallback: Initialize as regular mesh node
|
|
258
|
+
// This allows the device to still participate in the mesh
|
|
259
|
+
// even if router connection fails
|
|
260
|
+
Serial.println("Falling back to regular mesh mode...\n");
|
|
261
|
+
mesh.init(MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// ============================================
|
|
265
|
+
// Register Callbacks
|
|
266
|
+
// ============================================
|
|
267
|
+
mesh.onReceive(&receivedCallback);
|
|
268
|
+
mesh.onNewConnection(&newConnectionCallback);
|
|
269
|
+
mesh.onChangedConnections(&changedConnectionCallback);
|
|
270
|
+
mesh.onNodeTimeAdjusted(&nodeTimeAdjustedCallback);
|
|
271
|
+
|
|
272
|
+
// ============================================
|
|
273
|
+
// Enable Status Broadcasting Task
|
|
274
|
+
// ============================================
|
|
275
|
+
userScheduler.addTask(taskBroadcastStatus);
|
|
276
|
+
taskBroadcastStatus.enable();
|
|
277
|
+
|
|
278
|
+
// ============================================
|
|
279
|
+
// Print Startup Summary
|
|
280
|
+
// ============================================
|
|
281
|
+
Serial.println("================================================");
|
|
282
|
+
Serial.printf("Node ID: %u\n", mesh.getNodeId());
|
|
283
|
+
Serial.printf("Shared Gateway Mode: %s\n", mesh.isSharedGatewayMode() ? "Active" : "Inactive");
|
|
284
|
+
if (WiFi.status() == WL_CONNECTED) {
|
|
285
|
+
Serial.printf("Router IP: %s\n", WiFi.localIP().toString().c_str());
|
|
286
|
+
Serial.printf("Router Channel: %d\n", WiFi.channel());
|
|
287
|
+
}
|
|
288
|
+
Serial.println("================================================\n");
|
|
289
|
+
Serial.println("Status broadcasts will be sent every 10 seconds.\n");
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// ============================================
|
|
293
|
+
// Main Loop
|
|
294
|
+
// ============================================
|
|
295
|
+
void loop() {
|
|
296
|
+
// Update the mesh - this must be called regularly
|
|
297
|
+
// It handles all mesh network operations including:
|
|
298
|
+
// - Maintaining connections
|
|
299
|
+
// - Processing incoming messages
|
|
300
|
+
// - Running scheduled tasks
|
|
301
|
+
// - Time synchronization
|
|
302
|
+
mesh.update();
|
|
303
|
+
}
|
package/library.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/Alteriom/painlessMesh"
|
|
8
8
|
},
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.9.0",
|
|
10
10
|
"frameworks": [
|
|
11
11
|
"arduino"
|
|
12
12
|
],
|
|
@@ -78,36 +78,17 @@
|
|
|
78
78
|
],
|
|
79
79
|
"examples": [
|
|
80
80
|
"examples/alteriom/alteriom.ino",
|
|
81
|
-
"examples/alteriomSensorNode/alteriom_sensor_node.ino",
|
|
82
|
-
"examples/alteriomImproved/improved_sensor_node.ino",
|
|
83
|
-
"examples/alteriomMetricsHealth/metrics_health_node.ino",
|
|
84
|
-
"examples/alteriomPhase1/phase1_features.ino",
|
|
85
|
-
"examples/alteriomPhase2/phase2_features.ino",
|
|
86
81
|
"examples/basic/basic.ino",
|
|
87
82
|
"examples/bridge/bridge.ino",
|
|
88
|
-
"examples/bridge/bridge_health_monitoring_example.ino",
|
|
89
|
-
"examples/bridge/enhanced_mqtt_bridge_example.ino",
|
|
90
|
-
"examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino",
|
|
91
83
|
"examples/bridge_failover/bridge_failover.ino",
|
|
92
|
-
"examples/diagnosticsExample/diagnosticsExample.ino",
|
|
93
|
-
"examples/echoNode/echoNode.ino",
|
|
94
84
|
"examples/logClient/logClient.ino",
|
|
95
85
|
"examples/logServer/logServer.ino",
|
|
96
|
-
"examples/meshCommandNode/meshCommandNode.ino",
|
|
97
86
|
"examples/mqttBridge/mqttBridge.ino",
|
|
98
|
-
"examples/mqttCommandBridge/mqttCommandBridge.ino",
|
|
99
|
-
"examples/mqttStatusBridge/mqttStatusBridge.ino",
|
|
100
|
-
"examples/mqttTopologyTest/mqttTopologyTest.ino",
|
|
101
|
-
"examples/multi_bridge/primary_bridge.ino",
|
|
102
|
-
"examples/multi_bridge/secondary_bridge.ino",
|
|
103
|
-
"examples/multi_bridge/regular_node.ino",
|
|
104
87
|
"examples/namedMesh/namedMesh.ino",
|
|
105
|
-
"examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino",
|
|
106
|
-
"examples/ntpTimeSyncNode/ntpTimeSyncNode.ino",
|
|
107
88
|
"examples/otaReceiver/otaReceiver.ino",
|
|
108
89
|
"examples/otaSender/otaSender.ino",
|
|
109
|
-
"examples/
|
|
110
|
-
"examples/
|
|
90
|
+
"examples/priority/priority_basic_example.ino",
|
|
91
|
+
"examples/sharedGateway/sharedGateway.ino",
|
|
111
92
|
"examples/startHere/startHere.ino",
|
|
112
93
|
"examples/webServer/webServer.ino"
|
|
113
94
|
]
|
package/library.properties
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name=Alteriom PainlessMesh
|
|
2
|
-
version=1.
|
|
2
|
+
version=1.9.0
|
|
3
3
|
author=Coopdis,Scotty Franzyshen,Edwin van Leeuwen,Germán Martín,Maximilian Schwarz,Doanh Doanh,Alteriom
|
|
4
4
|
maintainer=Alteriom
|
|
5
5
|
sentence=A painless way to setup a mesh with ESP8266 and ESP32 devices with Alteriom extensions
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alteriom/painlessmesh",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "painlessMesh is a user-friendly library for creating mesh networks with ESP8266 and ESP32 devices. This Alteriom fork includes additional packages for sensor data (SensorPackage), device commands (CommandPackage), and status monitoring (StatusPackage). It handles routing and network management automatically, so you can focus on your application. The library uses JSON-based messaging and syncs time across all nodes, making it ideal for coordinated behaviour like synchronized light displays or sensor networks reporting to a central node.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"arduino",
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
"LICENSE",
|
|
85
85
|
"CHANGELOG.md",
|
|
86
86
|
"RELEASE_GUIDE.md",
|
|
87
|
-
"
|
|
88
|
-
"
|
|
87
|
+
"CONTRIBUTING.md",
|
|
88
|
+
"BRIDGE_TO_INTERNET.md"
|
|
89
89
|
]
|
|
90
90
|
}
|