@alteriom/painlessmesh 1.8.15 → 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 +61 -1
  3. package/CONTRIBUTING.md +79 -0
  4. package/README.md +69 -144
  5. package/docs/README.md +1 -0
  6. package/docs/api/shared-gateway.md +1207 -0
  7. package/examples/bridge_failover/README.md +81 -0
  8. package/examples/bridge_failover/bridge_failover.ino +35 -4
  9. package/examples/sharedGateway/README.md +235 -0
  10. package/examples/{meshCommandNode → sharedGateway}/platformio.ini +3 -2
  11. package/examples/sharedGateway/sharedGateway.ino +303 -0
  12. package/library.json +3 -22
  13. package/library.properties +1 -1
  14. package/package.json +3 -6
  15. package/src/arduino/wifi.hpp +342 -4
  16. package/src/painlessmesh/gateway.hpp +2120 -0
  17. package/src/painlessmesh/mesh.hpp +1034 -6
  18. package/src/painlessmesh/message_tracker.hpp +311 -0
  19. package/src/painlessmesh/protocol.hpp +6 -0
  20. package/DOCUMENTATION_INDEX.md +0 -146
  21. package/RELEASE_NOTES_1.8.15.md +0 -160
  22. package/RELEASE_READINESS_PLAN.md +0 -323
  23. package/TESTING_WITH_SIMULATOR.md +0 -259
  24. package/docs/API_DESIGN_GUIDELINES.md +0 -414
  25. package/docs/ARDUINO_LIBRARY_MANAGER_SUBMISSION.md +0 -331
  26. package/docs/BOOLEAN_NAMING_CONVENTION.md +0 -235
  27. package/docs/BRIDGE_FAILOVER.md +0 -512
  28. package/docs/BRIDGE_HEALTH_MONITORING.md +0 -293
  29. package/docs/BRIDGE_INITIALIZATION_FALLBACK.md +0 -357
  30. package/docs/CHANNEL_SYNCHRONIZATION.md +0 -209
  31. package/docs/CREATE_MISSING_RELEASES.md +0 -321
  32. package/docs/DOCUMENTATION_MIGRATION_PLAN.md +0 -176
  33. package/docs/FAQ_VERSION_NUMBERS.md +0 -152
  34. package/docs/IMPLEMENTATION_PLAN_MESH_TOPOLOGY.md +0 -1062
  35. package/docs/MESH_TOPOLOGY_GUIDE.md +0 -992
  36. package/docs/MESH_TOPOLOGY_PROGRESS.md +0 -422
  37. package/docs/MQTT_BRIDGE_COMMANDS.md +0 -894
  38. package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +0 -324
  39. package/docs/MQTT_COMMAND_SCHEMA_PROPOSAL.md +0 -576
  40. package/docs/MQTT_SCHEMA_COMPLIANCE.md +0 -340
  41. package/docs/MQTT_SCHEMA_PROPOSALS.md +0 -446
  42. package/docs/MQTT_SCHEMA_REVIEW.md +0 -690
  43. package/docs/OTA_COMMANDS_REFERENCE.md +0 -554
  44. package/docs/PHASE1_GUIDE.md +0 -349
  45. package/docs/PHASE2_GUIDE.md +0 -543
  46. package/docs/QUICK_REFERENCE_VERSIONING.md +0 -127
  47. package/docs/RELEASE_AGENT_SUMMARY.md +0 -386
  48. package/docs/SCHEMA_VALIDATION_CHECKLIST.md +0 -222
  49. package/docs/SIMULATOR_TESTING.md +0 -408
  50. package/docs/VERSION_MANAGEMENT.md +0 -213
  51. package/docs/archive/DOCUSAURUS_DEPLOYMENT.md +0 -166
  52. package/docs/archive/FEATURE_PROPOSALS.md +0 -337
  53. package/docs/archive/LIBRARY_JSON_FIX.md +0 -98
  54. package/docs/archive/LIBRARY_STRUCTURE_FIX.md +0 -215
  55. package/docs/archive/PHASE1_IMPLEMENTATION.md +0 -325
  56. package/docs/archive/PHASE2_IMPLEMENTATION.md +0 -567
  57. package/docs/archive/RELEASE_SUMMARY.md +0 -173
  58. package/docs/archive/SCONS_BUILD_FIX.md +0 -313
  59. package/docs/archive/TRIGGER_RELEASE.md +0 -280
  60. package/docs/archive/VECTOR_INCLUDE_FIX.md +0 -129
  61. package/docs/archive/ota-and-status-enhancements.md +0 -911
  62. package/docs/archive/ota-status-architecture-diagrams.md +0 -658
  63. package/docs/archive/ota-status-quick-reference.md +0 -284
  64. package/docs/design/.gitkeep +0 -1
  65. package/docs/design/STATION_CREDENTIALS_DESIGN.md +0 -182
  66. package/docs/development/ARDUINO_COMPLIANCE_SUMMARY.md +0 -71
  67. package/docs/development/CODE_REFACTORING_RECOMMENDATIONS.md +0 -1011
  68. package/docs/development/DOCKER_TESTING.md +0 -196
  69. package/docs/development/PLATFORMIO_USAGE.md +0 -180
  70. package/docs/development/TESTING_SUMMARY.md +0 -126
  71. package/docs/development/contributing.md +0 -301
  72. package/docs/development/documentation.md +0 -583
  73. package/docs/features/DIAGNOSTICS_API.md +0 -534
  74. package/docs/implementation/BRIDGE_ARCHITECTURE_IMPLEMENTATION.md +0 -340
  75. package/docs/implementation/BRIDGE_HEALTH_MONITORING_IMPLEMENTATION.md +0 -213
  76. package/docs/implementation/BRIDGE_STATUS_FEATURE.md +0 -635
  77. package/docs/implementation/DIAGNOSTICS_API_IMPLEMENTATION.md +0 -232
  78. package/docs/implementation/IMPLEMENTATION_COMPLETE.md +0 -228
  79. package/docs/implementation/IMPLEMENTATION_NTP_TIME_SYNC.md +0 -325
  80. package/docs/implementation/IMPLEMENTATION_SUMMARY.md +0 -316
  81. package/docs/implementation/MESSAGE_QUEUE_IMPLEMENTATION.md +0 -405
  82. package/docs/implementation/MULTI_BRIDGE_IMPLEMENTATION.md +0 -520
  83. package/docs/implementation/NTP_TIME_SYNC_FEATURE.md +0 -392
  84. package/docs/improvements/FUTURE_PROPOSALS.md +0 -1016
  85. package/docs/improvements/IMPLEMENTATION_HISTORY.md +0 -1091
  86. package/docs/improvements/OTA_STATUS_ENHANCEMENTS.md +0 -709
  87. package/docs/improvements/README.md +0 -212
  88. package/docs/internal/CUSTOM_AGENT_ANALYSIS.md +0 -391
  89. package/docs/internal/ISSUE_65_VERIFICATION.md +0 -947
  90. package/docs/internal/ISSUE_66_CLOSURE.md +0 -249
  91. package/docs/internal/ISSUE_66_STATUS.md +0 -316
  92. package/docs/internal/PR_SUMMARY.md +0 -315
  93. package/docs/internal/REVIEW_SUMMARY.md +0 -332
  94. package/docs/multi-bridge-setup.md +0 -1025
  95. package/docs/platformio-publishing.md +0 -255
  96. package/docs/platformio-setup-summary.md +0 -121
  97. package/docs/releases/ANNOUNCEMENT_v1.8.6.md +0 -63
  98. package/docs/releases/ANNOUNCEMENT_v1.8.7.md +0 -113
  99. package/docs/releases/BRIDGE_STATUS_SELF_REGISTRATION_FIX.md +0 -221
  100. package/docs/releases/FEATURE_HISTORY.md +0 -543
  101. package/docs/releases/GITHUB_RELEASE_v1.8.6.md +0 -71
  102. package/docs/releases/GITHUB_RELEASE_v1.8.7.md +0 -90
  103. package/docs/releases/PATCH_v1.7.2.md +0 -262
  104. package/docs/releases/PATCH_v1.7.3.md +0 -262
  105. package/docs/releases/PATCH_v1.7.4.md +0 -219
  106. package/docs/releases/PHASE1_SUMMARY.md +0 -246
  107. package/docs/releases/PHASE2_SUMMARY.md +0 -499
  108. package/docs/releases/PUBLISH_v1.8.0_INSTRUCTIONS.md +0 -163
  109. package/docs/releases/QUICK_START_RELEASES.md +0 -113
  110. package/docs/releases/RELEASE_CHECKLIST_1.8.10.md +0 -331
  111. package/docs/releases/RELEASE_CHECKLIST_1.8.9.md +0 -207
  112. package/docs/releases/RELEASE_CHECKLIST_v1.7.4.md +0 -253
  113. package/docs/releases/RELEASE_CHECKLIST_v1.7.5.md +0 -315
  114. package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +0 -389
  115. package/docs/releases/RELEASE_CHECKLIST_v1.8.0.md +0 -331
  116. package/docs/releases/RELEASE_CHECKLIST_v1.8.2.md +0 -309
  117. package/docs/releases/RELEASE_NOTES_1.7.0.md +0 -539
  118. package/docs/releases/RELEASE_NOTES_1.8.10.md +0 -239
  119. package/docs/releases/RELEASE_NOTES_1.8.9.md +0 -213
  120. package/docs/releases/RELEASE_NOTES_v1.8.0.md +0 -685
  121. package/docs/releases/RELEASE_NOTES_v1.8.1.md +0 -221
  122. package/docs/releases/RELEASE_NOTES_v1.8.2.md +0 -421
  123. package/docs/releases/RELEASE_NOTES_v1.8.3.md +0 -292
  124. package/docs/releases/RELEASE_NOTES_v1.8.4.md +0 -277
  125. package/docs/releases/RELEASE_NOTES_v1.8.6.md +0 -205
  126. package/docs/releases/RELEASE_NOTES_v1.8.7.md +0 -184
  127. package/docs/releases/RELEASE_PLAN_v1.7.6.md +0 -816
  128. package/docs/releases/RELEASE_SUMMARY_1.8.10.md +0 -193
  129. package/docs/releases/RELEASE_SUMMARY_v1.7.4.md +0 -276
  130. package/docs/releases/RELEASE_SUMMARY_v1.7.5.md +0 -322
  131. package/docs/releases/RELEASE_SUMMARY_v1.7.6.md +0 -436
  132. package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +0 -391
  133. package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +0 -523
  134. package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +0 -542
  135. package/docs/troubleshooting/ARDUINO_IDE_VERSION_FIX_SUMMARY.md +0 -229
  136. package/docs/troubleshooting/ARDUINO_LIBRARY_NAME_FIX.md +0 -197
  137. package/docs/troubleshooting/CRASH_QUICK_REF.md +0 -93
  138. package/docs/troubleshooting/ESP32_C6_COMPATIBILITY.md +0 -157
  139. package/docs/troubleshooting/FREERTOS_ASSERTION_FAILURE.md +0 -288
  140. package/docs/troubleshooting/FREERTOS_FIX_IMPLEMENTATION.md +0 -267
  141. package/docs/troubleshooting/NPM_PUBLISHING_ISSUE_SUMMARY.md +0 -110
  142. package/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md +0 -547
  143. package/docs/troubleshooting/QUICK_FIX_FREERTOS.md +0 -164
  144. package/docs/troubleshooting/SENSOR_NODE_CONNECTION_CRASH.md +0 -264
  145. package/docs/troubleshooting/common-architecture-mistakes.md +0 -438
  146. package/docs/troubleshooting/internet-access-faq.md +0 -299
  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 -108
  197. package/examples/multi_bridge/regular_node.ino +0 -141
  198. package/examples/multi_bridge/secondary_bridge.ino +0 -123
  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.15",
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.15
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.15",
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,10 +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",
89
- "RELEASE_NOTES_1.8.15.md",
90
- "RELEASE_READINESS_PLAN.md",
91
- "TESTING_WITH_SIMULATOR.md"
87
+ "CONTRIBUTING.md",
88
+ "BRIDGE_TO_INTERNET.md"
92
89
  ]
93
90
  }