@alteriom/painlessmesh 1.8.5 → 1.8.7
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 +47 -0
- package/README.md +2 -0
- package/RELEASE_GUIDE.md +9 -3
- package/docs/FAQ_VERSION_NUMBERS.md +152 -0
- package/docs/QUICK_REFERENCE_VERSIONING.md +127 -0
- package/docs/VERSION_MANAGEMENT.md +213 -0
- package/docs/releases/ANNOUNCEMENT_v1.8.6.md +63 -0
- package/docs/releases/ANNOUNCEMENT_v1.8.7.md +113 -0
- package/docs/releases/GITHUB_RELEASE_v1.8.6.md +71 -0
- package/docs/releases/GITHUB_RELEASE_v1.8.7.md +90 -0
- package/docs/releases/RELEASE_NOTES_v1.8.6.md +205 -0
- package/docs/releases/RELEASE_NOTES_v1.8.7.md +184 -0
- package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +0 -1
- package/examples/bridge_failover/README.md +74 -10
- package/examples/bridge_failover/bridge_failover.ino +16 -4
- package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +6 -1
- package/library.json +1 -1
- package/library.properties +1 -1
- package/package.json +1 -1
- package/src/AlteriomPainlessMesh.h +3 -3
- package/src/arduino/wifi.hpp +45 -2
- package/src/painlessMesh.h +1 -1
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# 🚀 AlteriomPainlessMesh v1.8.7 Released
|
|
2
|
+
|
|
3
|
+
**Date:** November 12, 2025
|
|
4
|
+
|
|
5
|
+
We're pleased to announce the release of **AlteriomPainlessMesh v1.8.7**, a patch release focused on bug fixes and documentation improvements.
|
|
6
|
+
|
|
7
|
+
## 🎯 What's New
|
|
8
|
+
|
|
9
|
+
### Bridge Internet Connectivity Detection Fixed
|
|
10
|
+
|
|
11
|
+
Bridge nodes now correctly detect and report internet connectivity status. The previous implementation only checked WiFi connection status, which led to incorrect reporting when bridges were connected to routers with internet access.
|
|
12
|
+
|
|
13
|
+
**Key Improvements:**
|
|
14
|
+
- ✅ Accurate internet status reporting for bridge nodes
|
|
15
|
+
- ✅ Proper gateway IP validation (not 0.0.0.0)
|
|
16
|
+
- ✅ Fixed false positives on regular nodes
|
|
17
|
+
- ✅ Better bridge failover logic
|
|
18
|
+
|
|
19
|
+
### Version Documentation Clarity
|
|
20
|
+
|
|
21
|
+
We've resolved confusion about version numbers in header files by creating comprehensive documentation and synchronizing all version references.
|
|
22
|
+
|
|
23
|
+
**What Changed:**
|
|
24
|
+
- ✅ All header file version comments now match library version
|
|
25
|
+
- ✅ New VERSION_MANAGEMENT.md document explains versioning
|
|
26
|
+
- ✅ Clear distinction between library version and file modification history
|
|
27
|
+
- ✅ Best practices for version management established
|
|
28
|
+
|
|
29
|
+
## 📚 New Documentation
|
|
30
|
+
|
|
31
|
+
### VERSION_MANAGEMENT.md
|
|
32
|
+
|
|
33
|
+
A comprehensive guide that answers:
|
|
34
|
+
- What do version numbers in header files mean?
|
|
35
|
+
- Where is the official library version defined?
|
|
36
|
+
- How to check if a file has been modified?
|
|
37
|
+
- Best practices for version comments
|
|
38
|
+
- Complete version update workflow
|
|
39
|
+
|
|
40
|
+
**Read it here:** [docs/VERSION_MANAGEMENT.md](https://github.com/Alteriom/painlessMesh/blob/main/docs/VERSION_MANAGEMENT.md)
|
|
41
|
+
|
|
42
|
+
## 🔧 For Developers
|
|
43
|
+
|
|
44
|
+
### Version Comment Best Practices
|
|
45
|
+
|
|
46
|
+
When releasing new versions, remember to update header file version comments:
|
|
47
|
+
|
|
48
|
+
```cpp
|
|
49
|
+
/**
|
|
50
|
+
* @file painlessMesh.h
|
|
51
|
+
* @version 1.8.7 // ← Keep this synchronized with library version
|
|
52
|
+
* @date 2025-11-12
|
|
53
|
+
*/
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
This helps maintain documentation consistency and prevents user confusion.
|
|
57
|
+
|
|
58
|
+
## 📦 How to Update
|
|
59
|
+
|
|
60
|
+
### Arduino Library Manager
|
|
61
|
+
```
|
|
62
|
+
Sketch → Include Library → Manage Libraries →
|
|
63
|
+
Search "AlteriomPainlessMesh" → Update to 1.8.7
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### PlatformIO
|
|
67
|
+
```ini
|
|
68
|
+
[env:myenv]
|
|
69
|
+
lib_deps =
|
|
70
|
+
alteriom/AlteriomPainlessMesh@^1.8.7
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### NPM
|
|
74
|
+
```bash
|
|
75
|
+
npm update @alteriom/painlessmesh
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## ✅ Compatibility
|
|
79
|
+
|
|
80
|
+
This release is **fully backward compatible** with v1.8.6. No breaking changes.
|
|
81
|
+
|
|
82
|
+
- ✅ ESP32 (all variants)
|
|
83
|
+
- ✅ ESP8266 (all variants)
|
|
84
|
+
- ✅ Arduino Core 2.x and 3.x
|
|
85
|
+
- ✅ PlatformIO
|
|
86
|
+
|
|
87
|
+
## 🐛 Bug Reports
|
|
88
|
+
|
|
89
|
+
If you encounter any issues with this release, please:
|
|
90
|
+
|
|
91
|
+
1. Check the [VERSION_MANAGEMENT.md](https://github.com/Alteriom/painlessMesh/blob/main/docs/VERSION_MANAGEMENT.md) for version-related questions
|
|
92
|
+
2. Review the [CHANGELOG.md](https://github.com/Alteriom/painlessMesh/blob/main/CHANGELOG.md) for detailed changes
|
|
93
|
+
3. [Open an issue](https://github.com/Alteriom/painlessMesh/issues) with a detailed description
|
|
94
|
+
|
|
95
|
+
## 🙏 Thank You
|
|
96
|
+
|
|
97
|
+
Thanks to our users for reporting issues and helping improve the library!
|
|
98
|
+
|
|
99
|
+
Special thanks to the user who raised the question about version comments in `painlessMesh.h`, leading to better documentation clarity.
|
|
100
|
+
|
|
101
|
+
## 📖 Resources
|
|
102
|
+
|
|
103
|
+
- **Release Notes:** [RELEASE_NOTES_v1.8.7.md](RELEASE_NOTES_v1.8.7.md)
|
|
104
|
+
- **CHANGELOG:** [CHANGELOG.md](../../CHANGELOG.md)
|
|
105
|
+
- **Documentation:** https://alteriom.github.io/painlessMesh/
|
|
106
|
+
- **GitHub Repository:** https://github.com/Alteriom/painlessMesh
|
|
107
|
+
- **Issues:** https://github.com/Alteriom/painlessMesh/issues
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
**Happy Meshing!** 🌐
|
|
112
|
+
|
|
113
|
+
— The Alteriom Team
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
## 🐛 Bug Fixes
|
|
2
|
+
|
|
3
|
+
### Bridge Failover Auto-Election (Issue #117)
|
|
4
|
+
|
|
5
|
+
Fixed critical issue where mesh networks would remain bridgeless indefinitely when all nodes started without a designated initial bridge.
|
|
6
|
+
|
|
7
|
+
**Before:** No initial bridge → no election → mesh stays bridgeless forever
|
|
8
|
+
**After:** No initial bridge → 60s startup → monitoring detects absence → election triggered → best RSSI node becomes bridge
|
|
9
|
+
|
|
10
|
+
#### Implementation Details
|
|
11
|
+
- Added periodic monitoring task (30s interval) that detects absence of healthy bridge
|
|
12
|
+
- Activates after 60s startup grace period to allow network stabilization
|
|
13
|
+
- Randomized election delay (1-3s) prevents thundering herd problem
|
|
14
|
+
- Respects existing safeguards: election state, 60s cooldown, router visibility
|
|
15
|
+
|
|
16
|
+
Fully backward compatible - pre-designated bridge mode continues to work as before.
|
|
17
|
+
|
|
18
|
+
**Core fix:** `src/arduino/wifi.hpp`
|
|
19
|
+
|
|
20
|
+
## 📝 Documentation
|
|
21
|
+
|
|
22
|
+
### Bridge Failover Example
|
|
23
|
+
|
|
24
|
+
Enhanced documentation to clarify two deployment modes:
|
|
25
|
+
|
|
26
|
+
- **Auto-Election Mode**: All nodes regular (`INITIAL_BRIDGE=false`), RSSI-based election after 60s
|
|
27
|
+
- **Pre-Designated Mode**: Traditional single initial bridge setup
|
|
28
|
+
|
|
29
|
+
Updated:
|
|
30
|
+
- `examples/bridge_failover/bridge_failover.ino` - Enhanced header comments
|
|
31
|
+
- `examples/bridge_failover/README.md` - Comprehensive auto-election documentation
|
|
32
|
+
|
|
33
|
+
## 🔧 Housekeeping
|
|
34
|
+
|
|
35
|
+
- Synchronized `package-lock.json` version to 1.8.5
|
|
36
|
+
|
|
37
|
+
## 📦 Installation
|
|
38
|
+
|
|
39
|
+
### PlatformIO
|
|
40
|
+
```ini
|
|
41
|
+
lib_deps = alteriom/AlteriomPainlessMesh@^1.8.6
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### NPM
|
|
45
|
+
```bash
|
|
46
|
+
npm install @alteriom/painlessmesh@1.8.6
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Arduino Library Manager
|
|
50
|
+
Search for "AlteriomPainlessMesh" and update through the IDE
|
|
51
|
+
|
|
52
|
+
## 🎯 Use Cases
|
|
53
|
+
|
|
54
|
+
This release is valuable for:
|
|
55
|
+
- Dynamic mesh networks with changing node positions
|
|
56
|
+
- Fault-tolerant deployments requiring automatic bridge recovery
|
|
57
|
+
- IoT systems with minimal human oversight
|
|
58
|
+
- Development environments without pre-configured bridges
|
|
59
|
+
|
|
60
|
+
## 🙏 Credits
|
|
61
|
+
|
|
62
|
+
Special thanks to @woodlist for reporting the issue and providing detailed logs.
|
|
63
|
+
|
|
64
|
+
## 📚 Resources
|
|
65
|
+
|
|
66
|
+
- [Full Release Notes](https://github.com/Alteriom/painlessMesh/blob/main/docs/releases/RELEASE_NOTES_v1.8.6.md)
|
|
67
|
+
- [Bridge Failover Example](https://github.com/Alteriom/painlessMesh/tree/main/examples/bridge_failover)
|
|
68
|
+
- [Issue #117](https://github.com/Alteriom/painlessMesh/issues/117)
|
|
69
|
+
- [Pull Request #118](https://github.com/Alteriom/painlessMesh/pull/118)
|
|
70
|
+
|
|
71
|
+
**Full Changelog**: https://github.com/Alteriom/painlessMesh/compare/v1.8.5...v1.8.6
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# AlteriomPainlessMesh v1.8.7
|
|
2
|
+
|
|
3
|
+
**Release Date:** November 12, 2025
|
|
4
|
+
**Type:** Patch Release - Bug Fixes & Documentation
|
|
5
|
+
|
|
6
|
+
## 🐛 Bug Fixes
|
|
7
|
+
|
|
8
|
+
### Bridge Internet Connectivity Detection
|
|
9
|
+
|
|
10
|
+
Fixed incorrect internet status reporting in bridge nodes:
|
|
11
|
+
- **Before:** Bridge → Router (with Internet) → Reports "Internet: NO" ❌
|
|
12
|
+
- **After:** Bridge → Router (with Internet) → Reports "Internet: YES" ✅
|
|
13
|
+
|
|
14
|
+
Bridge nodes now properly check for actual internet connectivity by verifying both WiFi connection status AND valid gateway IP (not 0.0.0.0).
|
|
15
|
+
|
|
16
|
+
**Impact:**
|
|
17
|
+
- ✅ Accurate internet status for bridge nodes
|
|
18
|
+
- ✅ Correct bridge failover behavior
|
|
19
|
+
- ✅ No more false positives on regular nodes
|
|
20
|
+
|
|
21
|
+
**Files changed:** `src/arduino/wifi.hpp`
|
|
22
|
+
|
|
23
|
+
### Version Documentation Consistency
|
|
24
|
+
|
|
25
|
+
Fixed confusing version numbers in header files:
|
|
26
|
+
- Updated `painlessMesh.h` version comment: 1.8.4 → 1.8.7
|
|
27
|
+
- Updated `AlteriomPainlessMesh.h` version defines: 1.6.1 → 1.8.7
|
|
28
|
+
- Created comprehensive VERSION_MANAGEMENT.md documentation
|
|
29
|
+
|
|
30
|
+
**Clarification:** Header file version comments indicate the library version when documentation was reviewed, not file-specific versioning. Use `library.properties` for the official version.
|
|
31
|
+
|
|
32
|
+
## 📚 New Documentation
|
|
33
|
+
|
|
34
|
+
### VERSION_MANAGEMENT.md
|
|
35
|
+
|
|
36
|
+
New comprehensive guide explaining:
|
|
37
|
+
- ✅ What version numbers in header files mean
|
|
38
|
+
- ✅ Where to find the official library version
|
|
39
|
+
- ✅ How to track file modification history
|
|
40
|
+
- ✅ Version update workflow and best practices
|
|
41
|
+
|
|
42
|
+
**Essential reading for contributors!**
|
|
43
|
+
|
|
44
|
+
## 📦 Installation
|
|
45
|
+
|
|
46
|
+
### Arduino Library Manager
|
|
47
|
+
```
|
|
48
|
+
Sketch → Include Library → Manage Libraries →
|
|
49
|
+
Search "AlteriomPainlessMesh" → Update to 1.8.7
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### PlatformIO
|
|
53
|
+
```ini
|
|
54
|
+
lib_deps = alteriom/AlteriomPainlessMesh@^1.8.7
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### NPM
|
|
58
|
+
```bash
|
|
59
|
+
npm install @alteriom/painlessmesh@1.8.7
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 🔄 Upgrade Notes
|
|
63
|
+
|
|
64
|
+
**Fully backward compatible** with v1.8.6. No breaking changes.
|
|
65
|
+
|
|
66
|
+
## 📖 Documentation
|
|
67
|
+
|
|
68
|
+
- **Release Notes:** [docs/releases/RELEASE_NOTES_v1.8.7.md](docs/releases/RELEASE_NOTES_v1.8.7.md)
|
|
69
|
+
- **Version Management Guide:** [docs/VERSION_MANAGEMENT.md](docs/VERSION_MANAGEMENT.md)
|
|
70
|
+
- **Full Changelog:** [CHANGELOG.md](CHANGELOG.md)
|
|
71
|
+
- **Online Documentation:** https://alteriom.github.io/painlessMesh/
|
|
72
|
+
|
|
73
|
+
## 🔗 Links
|
|
74
|
+
|
|
75
|
+
- **NPM Package:** https://www.npmjs.com/package/@alteriom/painlessmesh
|
|
76
|
+
- **PlatformIO Registry:** https://registry.platformio.org/libraries/alteriom/AlteriomPainlessMesh
|
|
77
|
+
- **Report Issues:** https://github.com/Alteriom/painlessMesh/issues
|
|
78
|
+
|
|
79
|
+
## ✅ Checksums
|
|
80
|
+
|
|
81
|
+
**Library Package:** `painlessMesh-v1.8.7.zip`
|
|
82
|
+
- Will be generated automatically by GitHub Actions
|
|
83
|
+
|
|
84
|
+
## 🙏 Credits
|
|
85
|
+
|
|
86
|
+
Thanks to our users for reporting issues and helping improve the library!
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
**Full Changelog:** https://github.com/Alteriom/painlessMesh/compare/v1.8.6...v1.8.7
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
# painlessMesh v1.8.6 Release Notes
|
|
2
|
+
|
|
3
|
+
**Release Date:** November 12, 2025
|
|
4
|
+
**Type:** Patch Release
|
|
5
|
+
**Breaking Changes:** None - 100% Backward Compatible
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 🎯 Executive Summary
|
|
10
|
+
|
|
11
|
+
Version 1.8.6 fixes a critical issue in the bridge failover mechanism where mesh networks would remain bridgeless indefinitely when all nodes started without a designated initial bridge. This release introduces automatic bridge election monitoring that ensures meshes always establish internet connectivity when configured for bridge failover.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## 🐛 Bug Fixes
|
|
16
|
+
|
|
17
|
+
### Bridge Failover Auto-Election (Issue #117)
|
|
18
|
+
|
|
19
|
+
**Problem:** The bridge failover example didn't work when all nodes had `INITIAL_BRIDGE=false`. The mesh would start but never elect a bridge, leaving the network without internet connectivity indefinitely.
|
|
20
|
+
|
|
21
|
+
**Symptoms:**
|
|
22
|
+
```
|
|
23
|
+
--- Bridge Status ---
|
|
24
|
+
I am bridge: NO
|
|
25
|
+
Internet available: NO
|
|
26
|
+
Known bridges: 0
|
|
27
|
+
No primary bridge available!
|
|
28
|
+
--------------------
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Root Cause:** Bridge elections only triggered when an *existing* bridge lost connectivity. When the mesh had no bridge from startup, no election was ever initiated.
|
|
32
|
+
|
|
33
|
+
**Solution:** Added periodic monitoring task (30-second interval) that:
|
|
34
|
+
- Detects absence of healthy bridges in the mesh
|
|
35
|
+
- Triggers bridge election after 60-second startup grace period
|
|
36
|
+
- Uses randomized election delay (1-3 seconds) to prevent thundering herd
|
|
37
|
+
- Respects all existing safeguards (election state, cooldown, router visibility)
|
|
38
|
+
|
|
39
|
+
**Behavior Changes:**
|
|
40
|
+
|
|
41
|
+
| Scenario | Before v1.8.6 | After v1.8.6 |
|
|
42
|
+
|----------|---------------|--------------|
|
|
43
|
+
| No initial bridge | Mesh stays bridgeless forever | Election triggered after 60s, best RSSI node becomes bridge |
|
|
44
|
+
| Pre-designated bridge | Works normally | Works normally (unchanged) |
|
|
45
|
+
| Bridge failure | Election triggered | Election triggered (unchanged) |
|
|
46
|
+
|
|
47
|
+
**Backward Compatibility:** Fully backward compatible. Pre-designated bridge mode continues to work exactly as before.
|
|
48
|
+
|
|
49
|
+
**Core Changes:** `src/arduino/wifi.hpp`
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 📝 Documentation Improvements
|
|
54
|
+
|
|
55
|
+
### Bridge Failover Example Clarification
|
|
56
|
+
|
|
57
|
+
Enhanced documentation for `examples/bridge_failover/` to clearly explain two deployment modes:
|
|
58
|
+
|
|
59
|
+
**Auto-Election Mode** (New Documentation)
|
|
60
|
+
- All nodes start with `INITIAL_BRIDGE=false`
|
|
61
|
+
- After 60-second startup grace period, monitoring begins
|
|
62
|
+
- Best RSSI node automatically elected as bridge
|
|
63
|
+
- Ideal for dynamic deployments where optimal bridge selection matters
|
|
64
|
+
|
|
65
|
+
**Pre-Designated Mode** (Existing)
|
|
66
|
+
- One node starts with `INITIAL_BRIDGE=true`
|
|
67
|
+
- Traditional setup with guaranteed initial bridge
|
|
68
|
+
- Ideal for fixed deployments with known bridge location
|
|
69
|
+
|
|
70
|
+
Updated files:
|
|
71
|
+
- `examples/bridge_failover/bridge_failover.ino` - Enhanced header comments
|
|
72
|
+
- `examples/bridge_failover/README.md` - Comprehensive mode documentation
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 🔧 Housekeeping
|
|
77
|
+
|
|
78
|
+
- Synchronized `package-lock.json` version to 1.8.5
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 🔄 Upgrade Guide
|
|
83
|
+
|
|
84
|
+
### From v1.8.5 to v1.8.6
|
|
85
|
+
|
|
86
|
+
This is a seamless upgrade with no breaking changes:
|
|
87
|
+
|
|
88
|
+
1. **Update Package Version:**
|
|
89
|
+
```bash
|
|
90
|
+
# PlatformIO
|
|
91
|
+
pio pkg update alteriom/AlteriomPainlessMesh@^1.8.6
|
|
92
|
+
|
|
93
|
+
# NPM
|
|
94
|
+
npm update @alteriom/painlessmesh
|
|
95
|
+
|
|
96
|
+
# Arduino Library Manager
|
|
97
|
+
# Update through IDE's Library Manager
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
2. **No Code Changes Required** - All existing code works without modification
|
|
101
|
+
|
|
102
|
+
3. **Optional: Enable Auto-Election Mode**
|
|
103
|
+
```cpp
|
|
104
|
+
// For auto-election mode, set all nodes to:
|
|
105
|
+
#define INITIAL_BRIDGE false
|
|
106
|
+
|
|
107
|
+
// Network will automatically elect bridge after 60s startup
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 🎯 Use Cases
|
|
113
|
+
|
|
114
|
+
This release is particularly valuable for:
|
|
115
|
+
|
|
116
|
+
### 1. Dynamic Mesh Networks
|
|
117
|
+
- Mobile or portable mesh deployments
|
|
118
|
+
- Networks where node positions change
|
|
119
|
+
- Optimal bridge selection based on WiFi signal strength
|
|
120
|
+
|
|
121
|
+
### 2. Fault-Tolerant Deployments
|
|
122
|
+
- Meshes that must establish connectivity without manual intervention
|
|
123
|
+
- Systems requiring automatic bridge recovery
|
|
124
|
+
- IoT deployments with minimal human oversight
|
|
125
|
+
|
|
126
|
+
### 3. Development & Testing
|
|
127
|
+
- Quick prototyping without pre-configuring bridge nodes
|
|
128
|
+
- Testing scenarios with varying network topologies
|
|
129
|
+
- Validation of bridge election algorithms
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 📊 Technical Details
|
|
134
|
+
|
|
135
|
+
### Monitoring Task Implementation
|
|
136
|
+
|
|
137
|
+
```cpp
|
|
138
|
+
// Periodic check every 30 seconds
|
|
139
|
+
this->addTask(30000, TASK_FOREVER, [this]() {
|
|
140
|
+
// Skip if: not enabled, already bridge, or in startup grace period
|
|
141
|
+
if (!bridgeFailoverEnabled || !routerCredentialsConfigured) return;
|
|
142
|
+
if (this->isBridge() || millis() < 60000) return;
|
|
143
|
+
|
|
144
|
+
// Check for healthy bridge
|
|
145
|
+
bool hasHealthyBridge = false;
|
|
146
|
+
for (const auto& bridge : this->getBridges()) {
|
|
147
|
+
if (bridge.isHealthy(bridgeTimeoutMs) && bridge.internetConnected) {
|
|
148
|
+
hasHealthyBridge = true;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Trigger election with randomized delay if no bridge found
|
|
154
|
+
if (!hasHealthyBridge) {
|
|
155
|
+
uint32_t delay = random(1000, 3000);
|
|
156
|
+
this->addTask(delay, TASK_ONCE, [this]() {
|
|
157
|
+
this->startBridgeElection();
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Safeguards
|
|
164
|
+
|
|
165
|
+
1. **60-second startup grace period** - Allows network to stabilize
|
|
166
|
+
2. **Randomized election delay** - Prevents simultaneous elections
|
|
167
|
+
3. **Respects election state** - Won't trigger if election already in progress
|
|
168
|
+
4. **Cooldown period** - Enforces 60-second minimum between elections
|
|
169
|
+
5. **Router visibility check** - Only nodes that can see router participate
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 🙏 Credits
|
|
174
|
+
|
|
175
|
+
Special thanks to @woodlist for reporting Issue #117 and providing detailed logs that helped identify the root cause.
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 📦 Distribution
|
|
180
|
+
|
|
181
|
+
This release is available through:
|
|
182
|
+
- **GitHub Releases**: [v1.8.6](https://github.com/Alteriom/painlessMesh/releases/tag/v1.8.6)
|
|
183
|
+
- **NPM**: `npm install @alteriom/painlessmesh@1.8.6`
|
|
184
|
+
- **PlatformIO**: `alteriom/AlteriomPainlessMesh@^1.8.6`
|
|
185
|
+
- **Arduino Library Manager**: Search for "AlteriomPainlessMesh"
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## 📚 Additional Resources
|
|
190
|
+
|
|
191
|
+
- [Bridge Failover Example](https://github.com/Alteriom/painlessMesh/tree/main/examples/bridge_failover)
|
|
192
|
+
- [Bridge Failover Documentation](https://github.com/Alteriom/painlessMesh/blob/main/examples/bridge_failover/README.md)
|
|
193
|
+
- [Issue #117 - Bug Report](https://github.com/Alteriom/painlessMesh/issues/117)
|
|
194
|
+
- [Pull Request #118 - Implementation](https://github.com/Alteriom/painlessMesh/pull/118)
|
|
195
|
+
- [Full Changelog](https://github.com/Alteriom/painlessMesh/blob/main/CHANGELOG.md)
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 🐛 Found a Bug?
|
|
200
|
+
|
|
201
|
+
Please report issues at: https://github.com/Alteriom/painlessMesh/issues
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
**Full Changelog**: [v1.8.5...v1.8.6](https://github.com/Alteriom/painlessMesh/compare/v1.8.5...v1.8.6)
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
# Release Notes - Version 1.8.7
|
|
2
|
+
|
|
3
|
+
**Release Date:** November 12, 2025
|
|
4
|
+
**Release Type:** Patch Release
|
|
5
|
+
**Focus:** Bug fixes and documentation improvements
|
|
6
|
+
|
|
7
|
+
## 🐛 Bug Fixes
|
|
8
|
+
|
|
9
|
+
### Bridge Internet Connectivity Detection
|
|
10
|
+
|
|
11
|
+
**Issue:** Bridge nodes were incorrectly reporting internet connectivity status.
|
|
12
|
+
|
|
13
|
+
**Problem:**
|
|
14
|
+
- Bridge connected to router would report "Internet: NO" even when the router had internet
|
|
15
|
+
- The `hasInternetConnection()` function was returning false positives on regular nodes
|
|
16
|
+
- Only checked WiFi connection status, not actual internet connectivity
|
|
17
|
+
|
|
18
|
+
**Solution:**
|
|
19
|
+
- Enhanced connectivity check to verify both WiFi status AND valid gateway IP
|
|
20
|
+
- Check now verifies `WiFi.status() == WL_CONNECTED` AND gateway IP is not 0.0.0.0
|
|
21
|
+
- Regular nodes without WiFi connection correctly report no internet
|
|
22
|
+
|
|
23
|
+
**Impact:**
|
|
24
|
+
- Bridge failover logic now works correctly
|
|
25
|
+
- Internet connectivity status is accurate
|
|
26
|
+
- Better network topology awareness
|
|
27
|
+
|
|
28
|
+
**Files Modified:**
|
|
29
|
+
- `src/arduino/wifi.hpp` (lines 1188-1192)
|
|
30
|
+
- `examples/bridge_failover/README.md` (added troubleshooting)
|
|
31
|
+
|
|
32
|
+
**Before:**
|
|
33
|
+
```
|
|
34
|
+
Bridge → Router (with Internet) → Reports: "Internet: NO" ❌
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**After:**
|
|
38
|
+
```
|
|
39
|
+
Bridge → Router (with Internet) → Reports: "Internet: YES" ✅
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### Version Documentation Consistency
|
|
43
|
+
|
|
44
|
+
**Issue:** Header file version comments were out of sync with library version, causing user confusion.
|
|
45
|
+
|
|
46
|
+
**Problem:**
|
|
47
|
+
- `painlessMesh.h` showed version 1.8.4 in header comment
|
|
48
|
+
- `AlteriomPainlessMesh.h` showed version 1.6.1 in version defines
|
|
49
|
+
- Library files showed version 1.8.6
|
|
50
|
+
- Users were confused about whether files had been modified since those versions
|
|
51
|
+
|
|
52
|
+
**Solution:**
|
|
53
|
+
- Updated `painlessMesh.h` header comment to version 1.8.7
|
|
54
|
+
- Updated `AlteriomPainlessMesh.h` version defines to 1.8.7
|
|
55
|
+
- Created comprehensive VERSION_MANAGEMENT.md documentation
|
|
56
|
+
- Clarified that header versions reflect library version, not file-specific versioning
|
|
57
|
+
- Added version management guidance to RELEASE_GUIDE.md
|
|
58
|
+
|
|
59
|
+
**Impact:**
|
|
60
|
+
- Clear documentation about version management
|
|
61
|
+
- No more confusion about header file versions
|
|
62
|
+
- Established best practices for version comments
|
|
63
|
+
|
|
64
|
+
**Files Modified:**
|
|
65
|
+
- `src/painlessMesh.h`
|
|
66
|
+
- `src/AlteriomPainlessMesh.h`
|
|
67
|
+
- `docs/VERSION_MANAGEMENT.md` (new)
|
|
68
|
+
- `RELEASE_GUIDE.md` (enhanced)
|
|
69
|
+
|
|
70
|
+
**Documentation Added:**
|
|
71
|
+
- Explains version comment purpose and meaning
|
|
72
|
+
- Clarifies difference between library version and file modification history
|
|
73
|
+
- Provides best practices for version management
|
|
74
|
+
- Documents the complete version update process
|
|
75
|
+
|
|
76
|
+
## 📚 Documentation Improvements
|
|
77
|
+
|
|
78
|
+
### New Documentation
|
|
79
|
+
|
|
80
|
+
1. **VERSION_MANAGEMENT.md**
|
|
81
|
+
- Comprehensive guide to version management
|
|
82
|
+
- Explains version comment purpose
|
|
83
|
+
- Clarifies common questions
|
|
84
|
+
- Documents version update workflow
|
|
85
|
+
- Best practices for version comments
|
|
86
|
+
|
|
87
|
+
### Enhanced Documentation
|
|
88
|
+
|
|
89
|
+
1. **RELEASE_GUIDE.md**
|
|
90
|
+
- Added reference to VERSION_MANAGEMENT.md
|
|
91
|
+
- Updated release process to include header version updates
|
|
92
|
+
- Clarified version management workflow
|
|
93
|
+
|
|
94
|
+
2. **bridge_failover/README.md**
|
|
95
|
+
- Added troubleshooting for internet connectivity issues
|
|
96
|
+
- Explained the enhanced connectivity detection
|
|
97
|
+
|
|
98
|
+
## 🔄 Migration Guide
|
|
99
|
+
|
|
100
|
+
No breaking changes. This release is fully backward compatible with version 1.8.6.
|
|
101
|
+
|
|
102
|
+
### For Users
|
|
103
|
+
|
|
104
|
+
**No action required.** Simply update to version 1.8.7:
|
|
105
|
+
|
|
106
|
+
**Arduino Library Manager:**
|
|
107
|
+
```
|
|
108
|
+
Sketch → Include Library → Manage Libraries → Search "AlteriomPainlessMesh" → Update
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
**PlatformIO:**
|
|
112
|
+
```ini
|
|
113
|
+
[env:myenv]
|
|
114
|
+
lib_deps =
|
|
115
|
+
alteriom/AlteriomPainlessMesh@^1.8.7
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**NPM:**
|
|
119
|
+
```bash
|
|
120
|
+
npm update @alteriom/painlessmesh
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### For Contributors
|
|
124
|
+
|
|
125
|
+
**When releasing future versions:**
|
|
126
|
+
1. Update header file version comments to match library version
|
|
127
|
+
2. Follow the VERSION_MANAGEMENT.md guidelines
|
|
128
|
+
3. Use the enhanced release process in RELEASE_GUIDE.md
|
|
129
|
+
|
|
130
|
+
## 📊 Technical Details
|
|
131
|
+
|
|
132
|
+
### Files Changed
|
|
133
|
+
- `src/painlessMesh.h` - Version comment updated
|
|
134
|
+
- `src/AlteriomPainlessMesh.h` - Version defines updated
|
|
135
|
+
- `src/arduino/wifi.hpp` - Internet connectivity detection fixed
|
|
136
|
+
- `examples/bridge_failover/README.md` - Troubleshooting added
|
|
137
|
+
- `docs/VERSION_MANAGEMENT.md` - New documentation
|
|
138
|
+
- `RELEASE_GUIDE.md` - Version management guidance added
|
|
139
|
+
- `CHANGELOG.md` - Release notes added
|
|
140
|
+
- `library.properties` - Version 1.8.7
|
|
141
|
+
- `library.json` - Version 1.8.7
|
|
142
|
+
- `package.json` - Version 1.8.7
|
|
143
|
+
|
|
144
|
+
### Testing
|
|
145
|
+
|
|
146
|
+
All existing tests pass. No new tests required as changes are:
|
|
147
|
+
- Documentation updates
|
|
148
|
+
- Bug fixes to existing functionality
|
|
149
|
+
- Version comment updates
|
|
150
|
+
|
|
151
|
+
### Compatibility
|
|
152
|
+
|
|
153
|
+
- ✅ **ESP32**: All variants supported
|
|
154
|
+
- ✅ **ESP8266**: All variants supported
|
|
155
|
+
- ✅ **Arduino Core 2.x**: Fully compatible
|
|
156
|
+
- ✅ **Arduino Core 3.x**: Fully compatible
|
|
157
|
+
- ✅ **PlatformIO**: All platforms supported
|
|
158
|
+
|
|
159
|
+
## 🙏 Acknowledgments
|
|
160
|
+
|
|
161
|
+
**Issue Reporter:**
|
|
162
|
+
- User question about version comments in painlessMesh.h
|
|
163
|
+
|
|
164
|
+
**Contributors:**
|
|
165
|
+
- @Alteriom - Bug fixes and documentation
|
|
166
|
+
|
|
167
|
+
## 📖 Related Resources
|
|
168
|
+
|
|
169
|
+
- **VERSION_MANAGEMENT.md** - Complete version management guide
|
|
170
|
+
- **RELEASE_GUIDE.md** - Release process documentation
|
|
171
|
+
- **CHANGELOG.md** - Complete version history
|
|
172
|
+
- **GitHub Issues** - [Report issues](https://github.com/Alteriom/painlessMesh/issues)
|
|
173
|
+
|
|
174
|
+
## 🔗 Links
|
|
175
|
+
|
|
176
|
+
- **GitHub Release:** https://github.com/Alteriom/painlessMesh/releases/tag/v1.8.7
|
|
177
|
+
- **NPM Package:** https://www.npmjs.com/package/@alteriom/painlessmesh
|
|
178
|
+
- **PlatformIO:** https://registry.platformio.org/libraries/alteriom/AlteriomPainlessMesh
|
|
179
|
+
- **Documentation:** https://alteriom.github.io/painlessMesh/
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
**Previous Release:** [v1.8.6](RELEASE_NOTES_v1.8.6.md) - November 12, 2025
|
|
184
|
+
**Next Release:** TBD
|
|
@@ -176,7 +176,6 @@ void checkCriticalConditions() {
|
|
|
176
176
|
alarm.timestamp = mesh.getNodeTime();
|
|
177
177
|
alarm.temperature = currentTemperature;
|
|
178
178
|
alarm.pressure = currentOxygenLevel;
|
|
179
|
-
alarm.deviceStatus = 0xFF; // Critical alarm flag
|
|
180
179
|
alarm.batteryLevel = 85;
|
|
181
180
|
|
|
182
181
|
if (internetAvailable) {
|