@alteriom/painlessmesh 1.7.6 → 1.7.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 +177 -0
- package/README.md +96 -14
- package/RELEASE_GUIDE.md +36 -0
- package/docs/API_DESIGN_GUIDELINES.md +414 -0
- package/docs/BOOLEAN_NAMING_CONVENTION.md +235 -0
- package/docs/MQTT_BRIDGE_COMMANDS.md +10 -10
- package/docs/MQTT_BRIDGE_IMPLEMENTATION_SUMMARY.md +1 -1
- package/docs/MQTT_SCHEMA_COMPLIANCE.md +57 -2
- package/docs/PHASE1_GUIDE.md +1 -1
- package/docs/alteriom/overview.md +25 -2
- package/docs/architecture/plugin-system.md +1 -1
- package/docs/archive/RELEASE_SUMMARY.md +1 -1
- package/docs/releases/RELEASE_CHECKLIST_v1.7.6.md +389 -0
- package/docs/releases/RELEASE_SUMMARY_v1.7.7.md +391 -0
- package/docs/v1.7.7_MQTT_IMPROVEMENTS.md +794 -0
- package/docs/wiki/API-Reference.md +2 -2
- package/docs/wiki/Complete-Documentation.md +1 -1
- package/examples/alteriom/README.md +150 -4
- package/examples/alteriom/alteriom.ino +1 -1
- package/examples/alteriom/alteriom_sensor_package.hpp +914 -4
- package/examples/alteriomImproved/alteriom_sensor_package.hpp +1 -1
- package/examples/alteriomImproved/improved_sensor_node.ino +1 -1
- package/examples/alteriomMetricsHealth/alteriom_sensor_package.hpp +796 -0
- package/examples/alteriomMetricsHealth/metrics_health_node.ino +418 -0
- package/examples/alteriomMetricsHealth/platformio.ini +26 -0
- package/examples/alteriomPhase1/alteriom_sensor_package.hpp +1 -1
- package/examples/alteriomPhase1/phase1_features.ino +2 -2
- package/examples/alteriomPhase2/alteriom_sensor_package.hpp +1 -1
- package/examples/alteriomSensorNode/alteriom_sensor_node.ino +1 -1
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +1 -1
- package/examples/bridge/enhanced_mqtt_bridge.hpp +610 -0
- package/examples/bridge/enhanced_mqtt_bridge_example.ino +226 -0
- package/examples/meshCommandNode/alteriom_sensor_package.hpp +1 -1
- package/examples/mqttCommandBridge/alteriom_sensor_package.hpp +1 -1
- package/examples/mqttTopologyTest/mqttTopologyTest.ino +5 -1
- package/library.json +1 -1
- package/library.properties +1 -1
- package/package.json +2 -2
|
@@ -36,7 +36,7 @@ Target Node → Mesh Network → Gateway Bridge → MQTT Broker → Web Applicat
|
|
|
36
36
|
|
|
37
37
|
| Direction | Package Type | Purpose |
|
|
38
38
|
|-----------|--------------|---------|
|
|
39
|
-
| MQTT → Mesh | CommandPackage (
|
|
39
|
+
| MQTT → Mesh | CommandPackage (400) | Control device, request data |
|
|
40
40
|
| Mesh → MQTT | StatusPackage (202) | Report device status |
|
|
41
41
|
| Mesh → MQTT | SensorPackage (200) | Sensor data reports |
|
|
42
42
|
| Mesh → MQTT | EnhancedStatusPackage (203) | Detailed health metrics |
|
|
@@ -74,7 +74,7 @@ Target Node → Mesh Network → Gateway Bridge → MQTT Broker → Web Applicat
|
|
|
74
74
|
| Command ID | Name | Description | Parameters |
|
|
75
75
|
|------------|------|-------------|------------|
|
|
76
76
|
| 200 | GET_STATUS | Request basic status | None |
|
|
77
|
-
|
|
|
77
|
+
| 400 | GET_METRICS | Request performance metrics | None |
|
|
78
78
|
| 202 | GET_DIAGNOSTICS | Request detailed diagnostics | None |
|
|
79
79
|
| 210 | START_MONITORING | Begin continuous monitoring | `interval_ms` (uint32_t) |
|
|
80
80
|
| 211 | STOP_MONITORING | Stop continuous monitoring | None |
|
|
@@ -155,7 +155,7 @@ alteriom/mesh/{mesh_id}/events # Real-time mesh state change events
|
|
|
155
155
|
|
|
156
156
|
## Command Definitions
|
|
157
157
|
|
|
158
|
-
### CommandPackage
|
|
158
|
+
### CommandPackage (Type 400)
|
|
159
159
|
|
|
160
160
|
Defined in `examples/alteriom/alteriom_sensor_package.hpp`:
|
|
161
161
|
|
|
@@ -167,7 +167,7 @@ public:
|
|
|
167
167
|
uint32_t commandId = 0; // Unique command tracking ID
|
|
168
168
|
TSTRING parameters = ""; // JSON-encoded parameters
|
|
169
169
|
|
|
170
|
-
CommandPackage() : SinglePackage(
|
|
170
|
+
CommandPackage() : SinglePackage(400) {}
|
|
171
171
|
};
|
|
172
172
|
```
|
|
173
173
|
|
|
@@ -235,7 +235,7 @@ The gateway bridge is implemented in `examples/bridge/mqtt_command_bridge.hpp` a
|
|
|
235
235
|
Mesh nodes implement command handlers in `examples/alteriom/mesh_command_node.ino`:
|
|
236
236
|
|
|
237
237
|
1. **Command Reception**
|
|
238
|
-
- Listen for CommandPackage (Type
|
|
238
|
+
- Listen for CommandPackage (Type 400)
|
|
239
239
|
- Parse command and parameters
|
|
240
240
|
- Execute appropriate action
|
|
241
241
|
|
|
@@ -354,7 +354,7 @@ The mesh topology system provides real-time visibility into the structure and he
|
|
|
354
354
|
|
|
355
355
|
```json
|
|
356
356
|
{
|
|
357
|
-
"type":
|
|
357
|
+
"type": 400,
|
|
358
358
|
"command": 300,
|
|
359
359
|
"targetDevice": 0,
|
|
360
360
|
"commandId": 12345,
|
|
@@ -525,7 +525,7 @@ client.loop_forever()
|
|
|
525
525
|
|
|
526
526
|
```json
|
|
527
527
|
{
|
|
528
|
-
"type":
|
|
528
|
+
"type": 400,
|
|
529
529
|
"command": 10,
|
|
530
530
|
"targetDevice": 123456,
|
|
531
531
|
"commandId": 1001,
|
|
@@ -554,7 +554,7 @@ client.loop_forever()
|
|
|
554
554
|
|
|
555
555
|
```json
|
|
556
556
|
{
|
|
557
|
-
"type":
|
|
557
|
+
"type": 400,
|
|
558
558
|
"command": 100,
|
|
559
559
|
"targetDevice": 0,
|
|
560
560
|
"commandId": 2001,
|
|
@@ -594,7 +594,7 @@ All nodes respond with their configuration on respective `mesh/config/<nodeId>`
|
|
|
594
594
|
|
|
595
595
|
```json
|
|
596
596
|
{
|
|
597
|
-
"type":
|
|
597
|
+
"type": 400,
|
|
598
598
|
"command": 200,
|
|
599
599
|
"targetDevice": 123456,
|
|
600
600
|
"commandId": 3001,
|
|
@@ -673,7 +673,7 @@ def on_connect(client, userdata, flags, rc):
|
|
|
673
673
|
|
|
674
674
|
# Send LED control command
|
|
675
675
|
command = {
|
|
676
|
-
"type":
|
|
676
|
+
"type": 400,
|
|
677
677
|
"command": 10,
|
|
678
678
|
"targetDevice": 123456,
|
|
679
679
|
"commandId": int(time.time() * 1000),
|
|
@@ -6,10 +6,65 @@ The painlessMesh library is compliant with the **@alteriom/mqtt-schema** specifi
|
|
|
6
6
|
|
|
7
7
|
## Schema Package
|
|
8
8
|
|
|
9
|
-
- **Package:** `@alteriom/mqtt-schema` v0.
|
|
9
|
+
- **Package:** `@alteriom/mqtt-schema` v0.7.2 (latest)
|
|
10
10
|
- **Registry:** npm (https://www.npmjs.com/package/@alteriom/mqtt-schema)
|
|
11
11
|
- **Documentation:** https://github.com/Alteriom/alteriom-mqtt-schema
|
|
12
|
-
- **Release:** v0.
|
|
12
|
+
- **Release:** v0.7.2 includes sensor metrics and enhanced message types!
|
|
13
|
+
|
|
14
|
+
## v0.7.2 Schema Alignment
|
|
15
|
+
|
|
16
|
+
### Message Type Codes (Faster Classification)
|
|
17
|
+
|
|
18
|
+
The schema now includes standardized message type codes for 90% faster message classification:
|
|
19
|
+
|
|
20
|
+
**Standard Schema Codes:**
|
|
21
|
+
- **200:** SENSOR_DATA - Sensor telemetry readings
|
|
22
|
+
- **201:** SENSOR_HEARTBEAT - Sensor presence/health
|
|
23
|
+
- **202:** SENSOR_STATUS - Sensor status change
|
|
24
|
+
- **203:** SENSOR_INFO - Sensor identification and capabilities (v0.7.2+)
|
|
25
|
+
- **204:** SENSOR_METRICS - Sensor health and performance metrics (v0.7.2+)
|
|
26
|
+
- **300:** GATEWAY_INFO - Gateway identification
|
|
27
|
+
- **301:** GATEWAY_METRICS - Gateway health metrics
|
|
28
|
+
- **302:** GATEWAY_DATA - Gateway telemetry (v0.7.2+)
|
|
29
|
+
- **303:** GATEWAY_HEARTBEAT - Gateway presence (v0.7.2+)
|
|
30
|
+
- **304:** GATEWAY_STATUS - Gateway status (v0.7.2+)
|
|
31
|
+
- **400:** COMMAND - Device control command
|
|
32
|
+
- **401:** COMMAND_RESPONSE - Command execution result
|
|
33
|
+
- **500:** FIRMWARE_STATUS - Firmware update status
|
|
34
|
+
- **600:** MESH_NODE_LIST - Mesh node inventory
|
|
35
|
+
- **601:** MESH_TOPOLOGY - Mesh network topology
|
|
36
|
+
- **602:** MESH_ALERT - Mesh network alert
|
|
37
|
+
- **603:** MESH_BRIDGE - Mesh protocol bridge (v0.7.1+)
|
|
38
|
+
- **604:** MESH_STATUS - Mesh status (v0.7.2+)
|
|
39
|
+
- **605:** MESH_METRICS - Mesh-level metrics (v0.7.2+)
|
|
40
|
+
- **700:** DEVICE_CONFIG - Device configuration management
|
|
41
|
+
|
|
42
|
+
**painlessMesh Mesh-Specific Codes (600+ range):**
|
|
43
|
+
- **600:** MeshNodeListPackage → MESH_NODE_LIST (v1.7.7+)
|
|
44
|
+
- **601:** MeshTopologyPackage → MESH_TOPOLOGY (v1.7.7+)
|
|
45
|
+
- **602:** MeshAlertPackage → MESH_ALERT (v1.7.7+)
|
|
46
|
+
- **603:** MeshBridgePackage → MESH_BRIDGE (v1.7.7+)
|
|
47
|
+
- **604:** EnhancedStatusPackage → MESH_STATUS (v1.7.7+)
|
|
48
|
+
- **605:** HealthCheckPackage → MESH_METRICS (v1.7.7+)
|
|
49
|
+
|
|
50
|
+
**painlessMesh Schema-Aligned Codes:**
|
|
51
|
+
- **200:** SensorPackage → SENSOR_DATA ✓
|
|
52
|
+
- **202:** StatusPackage → SENSOR_STATUS ✓
|
|
53
|
+
- **204:** MetricsPackage → SENSOR_METRICS ✓ (aligns with v0.7.2+)
|
|
54
|
+
- **400:** CommandPackage → COMMAND ✓ (moved from 201 in v1.7.7 for full schema compliance)
|
|
55
|
+
|
|
56
|
+
All painlessMesh packages now include the optional `message_type` field for optimal performance.
|
|
57
|
+
|
|
58
|
+
### Mesh Bridge Schema (Type 603)
|
|
59
|
+
|
|
60
|
+
New schema for bridging painlessMesh protocol to MQTT, enabling standardized mesh protocol integration.
|
|
61
|
+
|
|
62
|
+
**Key Features:**
|
|
63
|
+
- Native painlessMesh message encapsulation
|
|
64
|
+
- Support for SINGLE, BROADCAST, and other mesh message types
|
|
65
|
+
- RSSI, hop count, and timing information
|
|
66
|
+
- Optional payload decoding for MQTT v1 messages
|
|
67
|
+
- Multiple mesh protocol support (painlessMesh, ESP-NOW, BLE Mesh, etc.)
|
|
13
68
|
|
|
14
69
|
---
|
|
15
70
|
|
package/docs/PHASE1_GUIDE.md
CHANGED
|
@@ -194,7 +194,7 @@ The `alertFlags` field uses bit flags for different alert conditions:
|
|
|
194
194
|
| Type | Package Name | Description |
|
|
195
195
|
|------|--------------|-------------|
|
|
196
196
|
| 200 | SensorPackage | Environmental sensor data |
|
|
197
|
-
|
|
|
197
|
+
| 400 | CommandPackage | Device control commands |
|
|
198
198
|
| 202 | StatusPackage | Basic status (original) |
|
|
199
199
|
| **203** | **EnhancedStatusPackage** | **Comprehensive status (Phase 1)** |
|
|
200
200
|
|
|
@@ -36,7 +36,7 @@ mesh.sendPackage(&sensor);
|
|
|
36
36
|
- Greenhouse automation
|
|
37
37
|
- Industrial sensor networks
|
|
38
38
|
|
|
39
|
-
### CommandPackage (Type
|
|
39
|
+
### CommandPackage (Type 400)
|
|
40
40
|
For sending control commands to specific devices.
|
|
41
41
|
|
|
42
42
|
```cpp
|
|
@@ -155,7 +155,7 @@ Alteriom uses reserved type ID range 200-299:
|
|
|
155
155
|
```cpp
|
|
156
156
|
enum AlteriomTypes {
|
|
157
157
|
ALTERIOM_SENSOR = 200, // SensorPackage
|
|
158
|
-
ALTERIOM_COMMAND =
|
|
158
|
+
ALTERIOM_COMMAND = 400, // CommandPackage
|
|
159
159
|
ALTERIOM_STATUS = 202, // StatusPackage
|
|
160
160
|
// 203-299 reserved for future Alteriom packages
|
|
161
161
|
};
|
|
@@ -498,11 +498,34 @@ public:
|
|
|
498
498
|
3. **Validate under memory pressure**
|
|
499
499
|
4. **Test with maximum expected node count**
|
|
500
500
|
|
|
501
|
+
## Code Conventions
|
|
502
|
+
|
|
503
|
+
### Boolean Field Naming
|
|
504
|
+
|
|
505
|
+
Alteriom packages follow a consistent naming convention for boolean fields to improve code clarity:
|
|
506
|
+
|
|
507
|
+
- **`*Set` suffix**: Configuration data has been provided (e.g., `deviceSecretSet`)
|
|
508
|
+
- **`*Enabled` suffix**: Feature is currently active (e.g., `displayEnabled`)
|
|
509
|
+
- **`is*` prefix or `*Connected`**: Current runtime state (e.g., `mqttConnected`)
|
|
510
|
+
|
|
511
|
+
See [Boolean Naming Convention](../BOOLEAN_NAMING_CONVENTION.md) for complete guidelines.
|
|
512
|
+
|
|
513
|
+
### Time Field Naming
|
|
514
|
+
|
|
515
|
+
Time-based configuration fields follow a dual-unit convention:
|
|
516
|
+
|
|
517
|
+
- **Internal storage**: Always milliseconds (e.g., `sensorReadInterval`)
|
|
518
|
+
- **JSON serialization**: Both milliseconds (`_ms`) and seconds (`_s`) variants
|
|
519
|
+
- **JSON deserialization**: Read from milliseconds (`_ms`) variant
|
|
520
|
+
|
|
521
|
+
See package header documentation for complete details.
|
|
522
|
+
|
|
501
523
|
## Next Steps
|
|
502
524
|
|
|
503
525
|
- Learn about [Sensor Packages](sensor-packages.md) in detail
|
|
504
526
|
- Explore [Command System](command-system.md) implementation
|
|
505
527
|
- Study [Status Monitoring](status-monitoring.md) patterns
|
|
528
|
+
- Review [Boolean Naming Convention](../BOOLEAN_NAMING_CONVENTION.md) guidelines
|
|
506
529
|
- See [Tutorial Examples](../tutorials/sensor-networks.md) for hands-on practice
|
|
507
530
|
|
|
508
531
|
The Alteriom extensions provide a solid foundation for building robust IoT applications with painlessMesh. They demonstrate production-ready patterns while remaining flexible enough to adapt to your specific needs.
|
|
@@ -72,7 +72,7 @@ All original functionality from the upstream library is maintained:
|
|
|
72
72
|
|
|
73
73
|
### Enhanced Packages
|
|
74
74
|
- **SensorPackage** (Type 200): Environmental monitoring with temperature, humidity, pressure, battery levels
|
|
75
|
-
- **CommandPackage
|
|
75
|
+
- **CommandPackage (Type 400): Device control and automation commands
|
|
76
76
|
- **StatusPackage** (Type 202): Health monitoring and system status reporting
|
|
77
77
|
|
|
78
78
|
### Additional Features
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
# painlessMesh v1.7.6 Release Checklist
|
|
2
|
+
|
|
3
|
+
**Release Date:** October 19, 2025
|
|
4
|
+
**Release Type:** Critical Bug Fix
|
|
5
|
+
**Git Commit:** c17384a
|
|
6
|
+
**Git Tag:** v1.7.6
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## ✅ Completed Steps
|
|
11
|
+
|
|
12
|
+
### Code Implementation
|
|
13
|
+
- [x] Removed `src/painlessmesh/scheduler_queue.hpp` (30 lines deleted)
|
|
14
|
+
- [x] Removed `src/painlessmesh/scheduler_queue.cpp` (70 lines deleted)
|
|
15
|
+
- [x] Updated `src/painlessmesh/mesh.hpp` (removed queue includes and initialization)
|
|
16
|
+
- [x] Created comprehensive unit test `test/catch/catch_scheduler_queue_removal.cpp` (200+ lines)
|
|
17
|
+
|
|
18
|
+
### Version Updates
|
|
19
|
+
- [x] Updated `library.json` version: 1.7.5 → 1.7.6
|
|
20
|
+
- [x] Updated `library.properties` version: 1.7.5 → 1.7.6
|
|
21
|
+
- [x] Updated `package.json` version: 1.7.5 → 1.7.6
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
- [x] Updated `CHANGELOG.md` with v1.7.6 section
|
|
25
|
+
- [x] Created `docs/releases/RELEASE_PLAN_v1.7.6.md` (850+ lines)
|
|
26
|
+
- [x] Created `docs/releases/RELEASE_SUMMARY_v1.7.6.md` (comprehensive release notes)
|
|
27
|
+
- [x] Created `docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md` (historical reference)
|
|
28
|
+
- [x] Updated `README.md` with v1.7.6 information
|
|
29
|
+
|
|
30
|
+
### Git Operations
|
|
31
|
+
- [x] Staged all changes (`git add -A`)
|
|
32
|
+
- [x] Committed with detailed message (commit c17384a)
|
|
33
|
+
- [x] Created annotated tag v1.7.6
|
|
34
|
+
- [x] Pushed to GitHub (`git push origin main --tags`)
|
|
35
|
+
|
|
36
|
+
### Statistics
|
|
37
|
+
- **Files Changed:** 12 files
|
|
38
|
+
- **Insertions:** +2046 lines
|
|
39
|
+
- **Deletions:** -131 lines
|
|
40
|
+
- **Net:** +1915 lines (mostly documentation and tests)
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## 🔄 Manual Steps Required
|
|
45
|
+
|
|
46
|
+
### 1. Create GitHub Release
|
|
47
|
+
|
|
48
|
+
**URL:** https://github.com/Alteriom/painlessMesh/releases/new
|
|
49
|
+
|
|
50
|
+
**Release Details:**
|
|
51
|
+
- **Tag:** v1.7.6 (select existing tag)
|
|
52
|
+
- **Title:** `v1.7.6 - Critical Compilation Fix`
|
|
53
|
+
- **Set as latest release:** ✅ Checked
|
|
54
|
+
|
|
55
|
+
**Release Description Template:**
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
# v1.7.6 - Critical Compilation Fix
|
|
59
|
+
|
|
60
|
+
🚨 **URGENT**: If you are using v1.7.4 or v1.7.5, upgrade immediately. Those versions fail to compile.
|
|
61
|
+
|
|
62
|
+
## What's Fixed
|
|
63
|
+
|
|
64
|
+
✅ **Compilation Failure** - Fixed "_task_request_t was not declared" error
|
|
65
|
+
✅ **ESP32 Support** - All ESP32 builds now compile successfully
|
|
66
|
+
✅ **ESP8266 Support** - All ESP8266 builds now compile successfully
|
|
67
|
+
✅ **FreeRTOS Stability** - Maintained ~85% crash reduction on ESP32
|
|
68
|
+
|
|
69
|
+
## What Changed
|
|
70
|
+
|
|
71
|
+
This release removes the thread-safe scheduler queue that was causing compilation failures:
|
|
72
|
+
|
|
73
|
+
- **Removed**: `scheduler_queue.hpp` and `scheduler_queue.cpp`
|
|
74
|
+
- **Simplified**: `mesh.hpp` initialization code
|
|
75
|
+
- **Maintained**: Semaphore timeout fix for FreeRTOS crash protection
|
|
76
|
+
|
|
77
|
+
## Why This Fix
|
|
78
|
+
|
|
79
|
+
The thread-safe scheduler queue required `_TASK_THREAD_SAFE` macro, but:
|
|
80
|
+
- This macro conflicts with `_TASK_STD_FUNCTION` in TaskScheduler v4.0.x
|
|
81
|
+
- painlessMesh **requires** `_TASK_STD_FUNCTION` for lambda callbacks
|
|
82
|
+
- The queue code was disabled but still trying to compile
|
|
83
|
+
- Result: Type definitions were missing, causing compilation errors
|
|
84
|
+
|
|
85
|
+
## Upgrade Instructions
|
|
86
|
+
|
|
87
|
+
### PlatformIO
|
|
88
|
+
```ini
|
|
89
|
+
[env:your_board]
|
|
90
|
+
lib_deps =
|
|
91
|
+
https://github.com/Alteriom/painlessMesh.git#v1.7.6
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Arduino IDE
|
|
95
|
+
Update through Library Manager: **AlteriomPainlessMesh v1.7.6**
|
|
96
|
+
|
|
97
|
+
### NPM
|
|
98
|
+
```bash
|
|
99
|
+
npm update @alteriom/painlessmesh
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Performance
|
|
103
|
+
|
|
104
|
+
- ✅ ESP32 crash rate: ~5-8% (down from 30-40%)
|
|
105
|
+
- ✅ Crash reduction: ~85% via semaphore timeout increase
|
|
106
|
+
- ✅ No performance impact vs v1.7.2
|
|
107
|
+
- ✅ Full lambda and std::function support maintained
|
|
108
|
+
|
|
109
|
+
## Testing
|
|
110
|
+
|
|
111
|
+
- ✅ 710+ unit tests passing
|
|
112
|
+
- ✅ All 19 examples compile successfully
|
|
113
|
+
- ✅ ESP32 and ESP8266 platforms verified
|
|
114
|
+
- ✅ CI/CD pipeline passing
|
|
115
|
+
|
|
116
|
+
## Breaking Changes
|
|
117
|
+
|
|
118
|
+
**None** - This is a pure bug fix release.
|
|
119
|
+
|
|
120
|
+
## Known Limitations
|
|
121
|
+
|
|
122
|
+
- ESP32 crash protection is ~85% effective (not 95-98% as originally targeted)
|
|
123
|
+
- Thread-safe scheduler queue feature removed (may return in v1.8.0)
|
|
124
|
+
- Requires TaskScheduler v4.1+ for future thread-safe re-implementation
|
|
125
|
+
|
|
126
|
+
## Documentation
|
|
127
|
+
|
|
128
|
+
📋 [Complete Release Notes](https://github.com/Alteriom/painlessMesh/blob/main/docs/releases/RELEASE_SUMMARY_v1.7.6.md)
|
|
129
|
+
📖 [CHANGELOG](https://github.com/Alteriom/painlessMesh/blob/main/CHANGELOG.md)
|
|
130
|
+
📋 [Implementation Plan](https://github.com/Alteriom/painlessMesh/blob/main/docs/releases/RELEASE_PLAN_v1.7.6.md)
|
|
131
|
+
🐛 [Compilation Issues (Resolved)](https://github.com/Alteriom/painlessMesh/blob/main/docs/troubleshooting/PAINLESSMESH_V1.7.4_COMPILATION_ISSUES.md)
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
**Release Date**: October 19, 2025
|
|
136
|
+
**Build Status**: ✅ All tests passing
|
|
137
|
+
**Upgrade Priority**: 🚨 CRITICAL for v1.7.4/v1.7.5 users
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Action:** Copy the template above and create the release on GitHub.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### 2. Publish NPM Package
|
|
145
|
+
|
|
146
|
+
**Prerequisites:**
|
|
147
|
+
- NPM account with publish access
|
|
148
|
+
- Logged in to NPM (`npm whoami` to verify)
|
|
149
|
+
|
|
150
|
+
**Commands:**
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# 1. Verify login
|
|
154
|
+
npm whoami
|
|
155
|
+
|
|
156
|
+
# 2. (Optional) Test package creation
|
|
157
|
+
npm pack
|
|
158
|
+
|
|
159
|
+
# 3. Publish to NPM
|
|
160
|
+
npm publish --access public
|
|
161
|
+
|
|
162
|
+
# 4. Verify publication
|
|
163
|
+
npm view @alteriom/painlessmesh version
|
|
164
|
+
# Should show: 1.7.6
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**NPM Package URL:** https://www.npmjs.com/package/@alteriom/painlessmesh
|
|
168
|
+
|
|
169
|
+
**Checklist:**
|
|
170
|
+
- [ ] Logged in to NPM
|
|
171
|
+
- [ ] Package built successfully
|
|
172
|
+
- [ ] Published to NPM registry
|
|
173
|
+
- [ ] Version 1.7.6 visible on npmjs.com
|
|
174
|
+
- [ ] Installation tested: `npm install @alteriom/painlessmesh@1.7.6`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### 3. Monitor PlatformIO Registry
|
|
179
|
+
|
|
180
|
+
**URL:** https://registry.platformio.org/libraries/sparck75/AlteriomPainlessMesh
|
|
181
|
+
|
|
182
|
+
**Update Process:**
|
|
183
|
+
- **Automatic:** PlatformIO scans GitHub releases every 24 hours
|
|
184
|
+
- **Expected:** v1.7.6 should appear within 24 hours of GitHub Release
|
|
185
|
+
- **Manual Trigger (if needed):** `pio pkg publish .`
|
|
186
|
+
|
|
187
|
+
**Checklist:**
|
|
188
|
+
- [ ] Wait 24 hours after GitHub Release
|
|
189
|
+
- [ ] Verify v1.7.6 appears on registry
|
|
190
|
+
- [ ] Test installation: `pio pkg install --library "AlteriomPainlessMesh@1.7.6"`
|
|
191
|
+
- [ ] Verify example compilation
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
### 4. Monitor Arduino Library Manager
|
|
196
|
+
|
|
197
|
+
**Update Process:**
|
|
198
|
+
- **Automatic:** Arduino syncs from `library.properties` in GitHub releases
|
|
199
|
+
- **Expected:** v1.7.6 should appear within 24-48 hours
|
|
200
|
+
- **No manual action required**
|
|
201
|
+
|
|
202
|
+
**Verification:**
|
|
203
|
+
- [ ] Wait 24-48 hours after GitHub Release
|
|
204
|
+
- [ ] Open Arduino IDE Library Manager
|
|
205
|
+
- [ ] Search for "AlteriomPainlessMesh"
|
|
206
|
+
- [ ] Verify v1.7.6 is available
|
|
207
|
+
- [ ] Test installation and example compilation
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 📊 Success Criteria
|
|
212
|
+
|
|
213
|
+
### Immediate (Within 1 Hour)
|
|
214
|
+
- [ ] GitHub Release published successfully
|
|
215
|
+
- [ ] NPM package published and available
|
|
216
|
+
- [ ] CI/CD pipeline status: Green
|
|
217
|
+
|
|
218
|
+
### First 24 Hours
|
|
219
|
+
- [ ] Zero compilation error reports on GitHub Issues
|
|
220
|
+
- [ ] PlatformIO registry updated to v1.7.6
|
|
221
|
+
- [ ] Positive community feedback (if any)
|
|
222
|
+
- [ ] No critical bugs discovered
|
|
223
|
+
|
|
224
|
+
### First Week
|
|
225
|
+
- [ ] Arduino Library Manager synced to v1.7.6
|
|
226
|
+
- [ ] ESP32 crash reports show ~5-8% rate (not increasing)
|
|
227
|
+
- [ ] No regression reports from users
|
|
228
|
+
- [ ] CI/CD continues to pass
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 🔍 Monitoring Tasks
|
|
233
|
+
|
|
234
|
+
### GitHub Issues
|
|
235
|
+
Monitor for:
|
|
236
|
+
- Compilation errors (should be zero)
|
|
237
|
+
- Runtime crashes (should be ~5-8% on ESP32)
|
|
238
|
+
- Breaking API changes (should be none)
|
|
239
|
+
- Documentation issues
|
|
240
|
+
|
|
241
|
+
### CI/CD Pipeline
|
|
242
|
+
Check that:
|
|
243
|
+
- All tests continue to pass
|
|
244
|
+
- ESP32 examples compile
|
|
245
|
+
- ESP8266 examples compile
|
|
246
|
+
- No new lint errors
|
|
247
|
+
|
|
248
|
+
### Community Feedback
|
|
249
|
+
Watch for:
|
|
250
|
+
- User reports of successful upgrades
|
|
251
|
+
- Questions about migration
|
|
252
|
+
- Feature requests for v1.8.0
|
|
253
|
+
- Reports of improved stability
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 🚨 Rollback Plan
|
|
258
|
+
|
|
259
|
+
If critical issues are discovered:
|
|
260
|
+
|
|
261
|
+
### Immediate (Within 1 Hour)
|
|
262
|
+
1. **Advise users to downgrade:**
|
|
263
|
+
```ini
|
|
264
|
+
lib_deps = https://github.com/Alteriom/painlessMesh.git#v1.7.2
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
2. **Mark GitHub Release as pre-release** (if possible)
|
|
268
|
+
|
|
269
|
+
### Short-term (Within 24 Hours)
|
|
270
|
+
1. **Revert commit:**
|
|
271
|
+
```bash
|
|
272
|
+
git revert c17384a
|
|
273
|
+
git push origin main
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
2. **Delete tag:**
|
|
277
|
+
```bash
|
|
278
|
+
git tag -d v1.7.6
|
|
279
|
+
git push origin :refs/tags/v1.7.6
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
3. **Unpublish NPM package** (if within 72 hours):
|
|
283
|
+
```bash
|
|
284
|
+
npm unpublish @alteriom/painlessmesh@1.7.6
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### Medium-term (Within 1 Week)
|
|
288
|
+
1. Investigate root cause of rollback
|
|
289
|
+
2. Prepare hotfix v1.7.7
|
|
290
|
+
3. Re-test thoroughly
|
|
291
|
+
4. Re-release with fixes
|
|
292
|
+
|
|
293
|
+
**Rollback Criteria:**
|
|
294
|
+
- Compilation failures reported
|
|
295
|
+
- Critical functionality broken
|
|
296
|
+
- Crash rate increases significantly
|
|
297
|
+
- Data corruption or security issues
|
|
298
|
+
|
|
299
|
+
---
|
|
300
|
+
|
|
301
|
+
## 📝 Communication
|
|
302
|
+
|
|
303
|
+
### GitHub Discussions (Optional)
|
|
304
|
+
|
|
305
|
+
**Post announcement in Discussions:**
|
|
306
|
+
|
|
307
|
+
**Title:** `v1.7.6 Released - Critical Compilation Fix`
|
|
308
|
+
|
|
309
|
+
**Body:**
|
|
310
|
+
```markdown
|
|
311
|
+
Hi everyone! 👋
|
|
312
|
+
|
|
313
|
+
We've just released **v1.7.6**, which is a critical emergency fix for compilation issues in v1.7.4 and v1.7.5.
|
|
314
|
+
|
|
315
|
+
## 🚨 If you're on v1.7.4 or v1.7.5
|
|
316
|
+
|
|
317
|
+
**Please upgrade immediately.** Those versions fail to compile with the error:
|
|
318
|
+
```
|
|
319
|
+
'_task_request_t' was not declared
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## ✅ What's Fixed
|
|
323
|
+
|
|
324
|
+
- ESP32 and ESP8266 now compile successfully
|
|
325
|
+
- Removed problematic thread-safe queue code
|
|
326
|
+
- Maintained ~85% FreeRTOS crash reduction
|
|
327
|
+
- Zero breaking changes to API
|
|
328
|
+
|
|
329
|
+
## 📦 How to Upgrade
|
|
330
|
+
|
|
331
|
+
**PlatformIO:**
|
|
332
|
+
```ini
|
|
333
|
+
lib_deps = https://github.com/Alteriom/painlessMesh.git#v1.7.6
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Arduino IDE:** Update through Library Manager
|
|
337
|
+
|
|
338
|
+
**NPM:** `npm update @alteriom/painlessmesh`
|
|
339
|
+
|
|
340
|
+
## 📚 Documentation
|
|
341
|
+
|
|
342
|
+
- [Release Notes](https://github.com/Alteriom/painlessMesh/releases/tag/v1.7.6)
|
|
343
|
+
- [Full CHANGELOG](https://github.com/Alteriom/painlessMesh/blob/main/CHANGELOG.md)
|
|
344
|
+
|
|
345
|
+
Thanks for your patience, and apologies for the broken releases! 🙏
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## 📋 Post-Release Checklist
|
|
351
|
+
|
|
352
|
+
### Day 1 (October 19, 2025)
|
|
353
|
+
- [ ] GitHub Release created
|
|
354
|
+
- [ ] NPM package published
|
|
355
|
+
- [ ] CI/CD verified green
|
|
356
|
+
- [ ] No immediate issues reported
|
|
357
|
+
|
|
358
|
+
### Day 2 (October 20, 2025)
|
|
359
|
+
- [ ] PlatformIO registry check
|
|
360
|
+
- [ ] GitHub Issues monitored
|
|
361
|
+
- [ ] Community feedback reviewed
|
|
362
|
+
|
|
363
|
+
### Week 1 (October 19-26, 2025)
|
|
364
|
+
- [ ] Arduino Library Manager verified
|
|
365
|
+
- [ ] No critical bugs reported
|
|
366
|
+
- [ ] Crash rate statistics collected
|
|
367
|
+
- [ ] Plan v1.8.0 roadmap
|
|
368
|
+
|
|
369
|
+
---
|
|
370
|
+
|
|
371
|
+
## 🎯 Next Steps
|
|
372
|
+
|
|
373
|
+
### Immediate
|
|
374
|
+
1. Create GitHub Release (use template above)
|
|
375
|
+
2. Publish NPM package
|
|
376
|
+
3. Monitor CI/CD pipeline
|
|
377
|
+
|
|
378
|
+
### Future (v1.8.0 Planning)
|
|
379
|
+
1. Monitor TaskScheduler updates for v4.1+
|
|
380
|
+
2. Collect user feedback on v1.7.6
|
|
381
|
+
3. Evaluate thread-safe queue re-implementation
|
|
382
|
+
4. Consider alternative FreeRTOS fixes
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
**Release Manager:** Alteriom Development Team
|
|
387
|
+
**Completion Status:** Automated steps complete, manual steps pending
|
|
388
|
+
**Estimated Time for Manual Steps:** 30 minutes
|
|
389
|
+
**Priority:** HIGH - Users are waiting for working version
|