@alteriom/painlessmesh 1.8.7 → 1.8.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.8.8] - 2025-11-12
11
+
12
+ ### Fixed
13
+
14
+ - **Bridge Internet Connectivity Detection (Mobile Hotspot Compatibility)** - Fixed false negative with mobile hotspots
15
+ - Changed internet detection from checking gateway IP to checking local IP address
16
+ - Gateway IP may not be immediately available after connection, especially with mobile hotspots
17
+ - Some networks (mobile tethering) may not provide gateway IP via DHCP at all
18
+ - **Before**: Bridge connected to mobile hotspot → gets local IP → reports "Internet: NO" (gateway IP not available)
19
+ - **After**: Bridge connected to mobile hotspot → gets local IP → correctly reports "Internet: YES"
20
+ - Having a valid local IP + WiFi connected status is sufficient to indicate internet access
21
+ - Enhanced logging to show WiFi status, local IP, and gateway IP for better debugging
22
+ - Core fix in `src/arduino/wifi.hpp` line 1189-1191
23
+ - Improves upon 1.8.7 gateway IP check which didn't work with all network types
24
+ - Resolves issue where bridge connects successfully but still reports no internet
25
+ - Fixes Alteriom/painlessMesh#129
26
+
10
27
  ## [1.8.7] - 2025-11-12
11
28
 
12
29
  ### Fixed
@@ -344,12 +344,18 @@ bool amBridge = mesh.isBridge();
344
344
 
345
345
  **Symptoms**: Bridge shows "Internet available: NO" or `hasInternet: false` despite router having Internet
346
346
 
347
- **Cause**: Fixed in v1.8.5+. Previously only checked WiFi connection status, not actual Internet availability.
347
+ **Cause**: Fixed progressively in v1.8.5+ and v1.8.7+.
348
+
349
+ **Historical Fixes**:
350
+ - **v1.8.5**: Added gateway IP check in addition to WiFi connection status
351
+ - **v1.8.7**: Improved gateway IP checking logic
352
+ - **v1.8.8+**: Changed to check local IP instead of gateway IP for better mobile hotspot compatibility
348
353
 
349
354
  **Solutions**:
350
- - Update to painlessMesh v1.8.5 or later
351
- - Bridge now checks both WiFi connection AND valid gateway IP
352
- - If still seeing issues, verify router's gateway IP is accessible: check `WiFi.gatewayIP()` returns valid IP (not 0.0.0.0)
355
+ - Update to latest painlessMesh version
356
+ - Bridge now checks WiFi connection AND valid local IP address
357
+ - Works reliably with all network types including mobile hotspots and tethering
358
+ - Local IP check is more reliable than gateway IP, which may not be available on all network types
353
359
 
354
360
  ### Election Doesn't Start
355
361
 
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.7",
9
+ "version": "1.8.8",
10
10
  "frameworks": [
11
11
  "arduino"
12
12
  ],
@@ -1,5 +1,5 @@
1
1
  name=Alteriom PainlessMesh
2
- version=1.8.7
2
+ version=1.8.8
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.7",
3
+ "version": "1.8.8",
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",
@@ -1186,9 +1186,13 @@ class Mesh : public painlessmesh::Mesh<Connection> {
1186
1186
  obj["routing"] = 2; // BROADCAST routing
1187
1187
  obj["timestamp"] = this->getNodeTime();
1188
1188
 
1189
- // Check Internet connectivity: WiFi connected AND valid gateway IP
1189
+ // Check Internet connectivity: WiFi connected AND valid IP address
1190
+ // We check for valid local IP instead of gateway IP because:
1191
+ // 1. Gateway IP might not be immediately available after connection
1192
+ // 2. Some networks (mobile hotspots) may not provide gateway IP via DHCP
1193
+ // 3. Having a valid local IP + being connected is sufficient for internet access
1190
1194
  bool hasInternet = (WiFi.status() == WL_CONNECTED) &&
1191
- (WiFi.gatewayIP() != IPAddress(0, 0, 0, 0));
1195
+ (WiFi.localIP() != IPAddress(0, 0, 0, 0));
1192
1196
  obj["internetConnected"] = hasInternet;
1193
1197
 
1194
1198
  obj["routerRSSI"] = WiFi.RSSI();
@@ -1202,6 +1206,8 @@ class Mesh : public painlessmesh::Mesh<Connection> {
1202
1206
 
1203
1207
  Log(GENERAL, "sendBridgeStatus(): Broadcasting status (Internet: %s)\n",
1204
1208
  hasInternet ? "Connected" : "Disconnected");
1209
+ Log(GENERAL, "sendBridgeStatus(): WiFi status=%d, localIP=%s, gatewayIP=%s\n",
1210
+ WiFi.status(), WiFi.localIP().toString().c_str(), WiFi.gatewayIP().toString().c_str());
1205
1211
 
1206
1212
  this->sendBroadcast(msg);
1207
1213
  }