@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.
Files changed (208) hide show
  1. package/BRIDGE_TO_INTERNET.md +229 -0
  2. package/CHANGELOG.md +89 -1
  3. package/CONTRIBUTING.md +79 -0
  4. package/README.md +70 -143
  5. package/docs/README.md +1 -0
  6. package/docs/api/shared-gateway.md +1207 -0
  7. package/docs/troubleshooting/common-issues.md +28 -0
  8. package/docs/troubleshooting/faq.md +113 -12
  9. package/examples/basic/test/simulator/CMakeLists.txt +40 -0
  10. package/examples/basic/test/simulator/README.md +149 -0
  11. package/examples/basic/test/simulator/firmware/basic_firmware.hpp +117 -0
  12. package/examples/basic/test/simulator/scenarios/basic_mesh_test.yaml +81 -0
  13. package/examples/bridge/bridge.ino +17 -4
  14. package/examples/bridge_failover/README.md +81 -0
  15. package/examples/bridge_failover/bridge_failover.ino +51 -6
  16. package/examples/sharedGateway/README.md +235 -0
  17. package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
  18. package/examples/sharedGateway/sharedGateway.ino +303 -0
  19. package/library.json +3 -22
  20. package/library.properties +1 -1
  21. package/package.json +3 -3
  22. package/src/arduino/wifi.hpp +380 -13
  23. package/src/painlessmesh/gateway.hpp +2120 -0
  24. package/src/painlessmesh/mesh.hpp +1034 -6
  25. package/src/painlessmesh/message_tracker.hpp +311 -0
  26. package/src/painlessmesh/protocol.hpp +6 -0
  27. package/DOCUMENTATION_INDEX.md +0 -146
  28. package/docs/API_DESIGN_GUIDELINES.md +0 -414
  29. package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
  30. package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
  31. package/docs/BRIDGE_FAILOVER.md +0 -512
  32. package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
  33. package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
  34. package/docs/CREATE_MISSING_RELEASES.md +0 -321
  35. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
  36. package/docs/FAQ_VERSION_NUMBERS.md +0 -152
  37. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
  38. package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
  39. package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
  40. package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
  41. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
  42. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
  43. package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
  44. package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
  45. package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
  46. package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
  47. package/docs/PHASE1_GUIDE.md +0 -349
  48. package/docs/PHASE2_GUIDE.md +0 -543
  49. package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
  50. package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
  51. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
  52. package/docs/VERSION_MANAGEMENT.md +0 -213
  53. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
  54. package/docs/archive/FEATURE_PROPOSALS.md +0 -337
  55. package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
  56. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
  57. package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
  58. package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
  59. package/docs/archive/RELEASE_SUMMARY.md +0 -173
  60. package/docs/archive/SCONS_BUILD_FIX.md +0 -313
  61. package/docs/archive/TRIGGER_RELEASE.md +0 -280
  62. package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
  63. package/docs/archive/ota-and-status-enhancements.md +0 -911
  64. package/docs/archive/ota-status-architecture-diagrams.md +0 -658
  65. package/docs/archive/ota-status-quick-reference.md +0 -284
  66. package/docs/design/.gitkeep +0 -1
  67. package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
  68. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
  69. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
  70. package/docs/development/DOCKER_TESTING.md +0 -196
  71. package/docs/development/PLATFORMIO_USAGE.md +0 -180
  72. package/docs/development/TESTING_SUMMARY.md +0 -126
  73. package/docs/development/contributing.md +0 -301
  74. package/docs/development/documentation.md +0 -583
  75. package/docs/features/DIAGNOSTICS_API.md +0 -534
  76. package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
  77. package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
  78. package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
  79. package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
  80. package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
  81. package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
  82. package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
  83. package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
  84. package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
  85. package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
  86. package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
  87. package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
  88. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
  89. package/docs/improvements/README.md +0 -212
  90. package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
  91. package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
  92. package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
  93. package/docs/internal/ISSUE_66_STATUS.md +0 -316
  94. package/docs/internal/PR_SUMMARY.md +0 -315
  95. package/docs/internal/REVIEW_SUMMARY.md +0 -332
  96. package/docs/multi-bridge-setup.md +0 -1025
  97. package/docs/platformio-publishing.md +0 -255
  98. package/docs/platformio-setup-summary.md +0 -121
  99. package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
  100. package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
  101. package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
  102. package/docs/releases/FEATURE_HISTORY.md +0 -543
  103. package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
  104. package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
  105. package/docs/releases/PATCH_v1.7.2.md +0 -262
  106. package/docs/releases/PATCH_v1.7.3.md +0 -262
  107. package/docs/releases/PATCH_v1.7.4.md +0 -219
  108. package/docs/releases/PHASE1_SUMMARY.md +0 -246
  109. package/docs/releases/PHASE2_SUMMARY.md +0 -499
  110. package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
  111. package/docs/releases/QUICK_START_RELEASES.md +0 -113
  112. package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
  113. package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
  114. package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
  115. package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
  116. package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
  117. package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
  118. package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
  119. package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
  120. package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
  121. package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
  122. package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
  123. package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
  124. package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
  125. package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
  126. package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
  127. package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
  128. package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
  129. package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
  130. package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
  131. package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
  132. package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
  133. package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
  134. package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
  135. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
  136. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
  137. package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
  138. package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
  139. package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
  140. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
  141. package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
  142. package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
  143. package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
  144. package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
  145. package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
  146. package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
  147. package/docs/troubleshooting/station-reconnection-issues.md +0 -172
  148. package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +0 -794
  149. package/docs/wiki/API-Reference.md +0 -246
  150. package/docs/wiki/Complete-Documentation.md +0 -123
  151. package/examples/alteriomImproved/alteriom_sensor_package.hpp +0 -224
  152. package/examples/alteriomImproved/improved_sensor_node.ino +0 -248
  153. package/examples/alteriomImproved/platformio.ini +0 -32
  154. package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +0 -796
  155. package/examples/alteriomMetricsHealth/metrics_health_node.ino +0 -429
  156. package/examples/alteriomMetricsHealth/platformio.ini +0 -26
  157. package/examples/alteriomPhase1/alteriom_sensor_package.hpp +0 -224
  158. package/examples/alteriomPhase1/phase1_features.ino +0 -242
  159. package/examples/alteriomPhase1/platformio.ini +0 -26
  160. package/examples/alteriomPhase2/alteriom_sensor_package.hpp +0 -224
  161. package/examples/alteriomPhase2/phase2_features.ino +0 -186
  162. package/examples/alteriomPhase2/platformio.ini +0 -26
  163. package/examples/alteriomSensorNode/alteriom_sensor_node.ino +0 -186
  164. package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +0 -1227
  165. package/examples/alteriomSensorNode/platformio.ini +0 -26
  166. package/examples/bridge/alteriom_sensor_package.hpp +0 -1170
  167. package/examples/bridge/bridge_health_monitoring_example.ino +0 -188
  168. package/examples/bridge/enhanced_mqtt_bridge.hpp +0 -610
  169. package/examples/bridge/enhanced_mqtt_bridge_example.ino +0 -226
  170. package/examples/bridge/mesh_event_publisher.hpp +0 -253
  171. package/examples/bridge/mesh_topology_reporter.hpp +0 -303
  172. package/examples/bridge/mqtt_command_bridge.hpp +0 -459
  173. package/examples/bridge/mqtt_status_bridge.hpp +0 -519
  174. package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +0 -1227
  175. package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -342
  176. package/examples/bridgeAwareSensorNode/platformio.ini +0 -26
  177. package/examples/diagnosticsExample/diagnosticsExample.ino +0 -171
  178. package/examples/diagnosticsExample/platformio.ini +0 -26
  179. package/examples/echoNode/echoNode.ino +0 -33
  180. package/examples/echoNode/platformio.ini +0 -26
  181. package/examples/meshCommandNode/alteriom_sensor_package.hpp +0 -235
  182. package/examples/meshCommandNode/meshCommandNode.ino +0 -265
  183. package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +0 -235
  184. package/examples/mqttCommandBridge/mesh_event_publisher.hpp +0 -253
  185. package/examples/mqttCommandBridge/mesh_topology_reporter.hpp +0 -303
  186. package/examples/mqttCommandBridge/mqttCommandBridge.ino +0 -254
  187. package/examples/mqttCommandBridge/mqtt_command_bridge.hpp +0 -462
  188. package/examples/mqttCommandBridge/platformio.ini +0 -27
  189. package/examples/mqttStatusBridge/mqttStatusBridge.ino +0 -218
  190. package/examples/mqttStatusBridge/mqtt_status_bridge.hpp +0 -522
  191. package/examples/mqttStatusBridge/platformio.ini +0 -27
  192. package/examples/mqttTopologyTest/README.md +0 -467
  193. package/examples/mqttTopologyTest/mqttTopologyTest.ino +0 -754
  194. package/examples/mqttTopologyTest/platformio.ini +0 -27
  195. package/examples/multi_bridge/README.md +0 -346
  196. package/examples/multi_bridge/primary_bridge.ino +0 -96
  197. package/examples/multi_bridge/regular_node.ino +0 -141
  198. package/examples/multi_bridge/secondary_bridge.ino +0 -111
  199. package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +0 -1383
  200. package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +0 -86
  201. package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +0 -1383
  202. package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +0 -109
  203. package/examples/queued_alarms/README.md +0 -390
  204. package/examples/queued_alarms/queued_alarms.ino +0 -265
  205. package/examples/routing_demo/README.md +0 -172
  206. package/examples/routing_demo/routing_demo.ino +0 -102
  207. package/examples/rtcIntegration/README.md +0 -294
  208. 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.8.14",
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/queued_alarms/queued_alarms.ino",
110
- "examples/rtcIntegration/rtcIntegration.ino",
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
  ]
@@ -1,5 +1,5 @@
1
1
  name=Alteriom PainlessMesh
2
- version=1.8.14
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.8.14",
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
- "DOCUMENTATION_INDEX.md",
88
- "RELEASE_NOTES_1.8.13.md"
87
+ "CONTRIBUTING.md",
88
+ "BRIDGE_TO_INTERNET.md"
89
89
  ]
90
90
  }