@alteriom/painlessmesh 1.7.9 → 1.8.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.
- package/CHANGELOG.md +94 -2
- package/README.md +108 -1
- package/docs/BRIDGE_FAILOVER.md +512 -0
- package/docs/BRIDGE_HEALTH_MONITORING.md +293 -0
- package/docs/CREATE_MISSING_RELEASES.md +321 -0
- package/docs/releases/RELEASE_SUMMARY_v1.7.8.md +523 -0
- package/docs/releases/RELEASE_SUMMARY_v1.7.9.md +542 -0
- package/examples/alteriom/alteriom_sensor_package.hpp +213 -0
- package/examples/alteriomSensorNode/alteriom_sensor_package.hpp +1014 -11
- package/examples/basic/basic.ino +6 -2
- package/examples/bridge/bridge.ino +44 -23
- package/examples/bridge/bridge_health_monitoring_example.ino +188 -0
- package/examples/bridgeAwareSensorNode/alteriom_sensor_package.hpp +1227 -0
- package/examples/bridgeAwareSensorNode/bridgeAwareSensorNode.ino +343 -0
- package/examples/bridgeAwareSensorNode/platformio.ini +26 -0
- package/examples/bridge_failover/README.md +358 -0
- package/examples/bridge_failover/bridge_failover.ino +180 -0
- package/examples/bridge_failover/platformio.ini +27 -0
- package/examples/diagnosticsExample/diagnosticsExample.ino +171 -0
- package/examples/diagnosticsExample/platformio.ini +26 -0
- package/examples/ntpTimeSyncBridge/alteriom_sensor_package.hpp +1383 -0
- package/examples/ntpTimeSyncBridge/ntpTimeSyncBridge.ino +81 -0
- package/examples/ntpTimeSyncNode/alteriom_sensor_package.hpp +1383 -0
- package/examples/ntpTimeSyncNode/ntpTimeSyncNode.ino +109 -0
- package/examples/rtcIntegration/README.md +235 -0
- package/examples/rtcIntegration/rtcIntegration.ino +196 -0
- package/library.json +1 -1
- package/library.properties +1 -1
- package/package.json +1 -1
- package/src/arduino/wifi.hpp +572 -0
- package/src/painlessMeshSTA.cpp +63 -0
- package/src/painlessMeshSTA.h +3 -0
- package/src/painlessmesh/mesh.hpp +1127 -4
- package/src/painlessmesh/rtc.hpp +203 -0
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
# painlessMesh v1.7.8 Release Summary
|
|
2
|
+
|
|
3
|
+
**Release Date:** November 5, 2025
|
|
4
|
+
**Version:** 1.7.8
|
|
5
|
+
**Type:** Feature Release + Bug Fixes
|
|
6
|
+
**Compatibility:** 100% backward compatible with v1.7.7
|
|
7
|
+
|
|
8
|
+
## 🎯 Executive Summary
|
|
9
|
+
|
|
10
|
+
Version 1.7.8 introduces MQTT Schema v0.7.3 compliance with `message_type` fields for 90% faster message classification, comprehensive documentation for bridging mesh networks to the Internet, and enhanced StatusPackage with organization and sensor configuration fields. This release also includes critical bug fixes for CI/CD pipelines, ArduinoJson API updates, and ESP8266 compatibility improvements.
|
|
11
|
+
|
|
12
|
+
## 🚀 What's New
|
|
13
|
+
|
|
14
|
+
### MQTT Schema v0.7.3 Compliance
|
|
15
|
+
|
|
16
|
+
**Upgraded from v0.7.2 to v0.7.3** - Added `message_type` field to key packages for dramatic performance improvement:
|
|
17
|
+
|
|
18
|
+
- **SensorPackage (Type 200)** - Now includes `message_type` field
|
|
19
|
+
- **StatusPackage (Type 202)** - Now includes `message_type` field
|
|
20
|
+
- **CommandPackage (Type 400)** - Now includes `message_type` field
|
|
21
|
+
- **Performance**: 90% faster message classification by avoiding JSON parsing
|
|
22
|
+
- **Full alignment** with @alteriom/mqtt-schema v0.7.3 specification
|
|
23
|
+
|
|
24
|
+
**Why This Matters:**
|
|
25
|
+
- Previous versions required parsing entire JSON to determine message type
|
|
26
|
+
- Now type can be read from a single field at the envelope level
|
|
27
|
+
- Dramatically reduces CPU overhead on gateway/bridge nodes
|
|
28
|
+
- Enables faster routing and processing in large mesh networks
|
|
29
|
+
|
|
30
|
+
### BRIDGE_TO_INTERNET.md Documentation
|
|
31
|
+
|
|
32
|
+
**New comprehensive guide** for bridging mesh networks to the Internet via WiFi router:
|
|
33
|
+
|
|
34
|
+
**What's Covered:**
|
|
35
|
+
- Complete code examples with AP+STA mode configuration
|
|
36
|
+
- WiFi channel matching requirements and best practices
|
|
37
|
+
- Links to working bridge examples:
|
|
38
|
+
- Basic bridge implementation
|
|
39
|
+
- MQTT bridge
|
|
40
|
+
- Web server bridge
|
|
41
|
+
- Enhanced MQTT bridge
|
|
42
|
+
- Architecture diagrams and forwarding patterns
|
|
43
|
+
- Troubleshooting common issues
|
|
44
|
+
- Additional resources and references
|
|
45
|
+
|
|
46
|
+
**Use Cases:**
|
|
47
|
+
- Connect isolated mesh network to the Internet
|
|
48
|
+
- Enable remote monitoring and control
|
|
49
|
+
- Bridge mesh data to cloud services
|
|
50
|
+
- Integrate with existing infrastructure
|
|
51
|
+
|
|
52
|
+
### Enhanced StatusPackage
|
|
53
|
+
|
|
54
|
+
**New organization fields** for enterprise deployments:
|
|
55
|
+
- `organizationId` - Unique identifier for the organization
|
|
56
|
+
- `organizationName` - Human-readable organization name
|
|
57
|
+
- `organizationDomain` - DNS domain for the organization
|
|
58
|
+
|
|
59
|
+
**New sensor configuration fields:**
|
|
60
|
+
- `sensorTypes` - Array of sensor types available on this node
|
|
61
|
+
- `sensorConfig` - JSON configuration for sensors
|
|
62
|
+
- `sensorInventory` - Array of sensor identifiers
|
|
63
|
+
|
|
64
|
+
**Improved JSON Structure:**
|
|
65
|
+
- Sensor data uses `sensors` key (array of readings)
|
|
66
|
+
- Sensor configuration uses separate keys (no key collisions)
|
|
67
|
+
- CamelCase field naming convention for consistency
|
|
68
|
+
- Unconditional serialization for predictable JSON structure
|
|
69
|
+
|
|
70
|
+
**Benefits:**
|
|
71
|
+
- Better multi-tenant support
|
|
72
|
+
- Clear separation of runtime data vs configuration
|
|
73
|
+
- Easier inventory management
|
|
74
|
+
- Improved dashboard integration
|
|
75
|
+
|
|
76
|
+
### API Design Guidelines
|
|
77
|
+
|
|
78
|
+
**New documentation file:** `docs/API_DESIGN_GUIDELINES.md`
|
|
79
|
+
|
|
80
|
+
**Contents:**
|
|
81
|
+
- Field naming conventions (camelCase, units in field names)
|
|
82
|
+
- Boolean naming patterns (`is`, `has`, `should`, `can` prefixes)
|
|
83
|
+
- Time field naming with units (`_ms`, `_s`, `_us` suffixes)
|
|
84
|
+
- Serialization patterns and consistency rules
|
|
85
|
+
- Comprehensive validation tests
|
|
86
|
+
|
|
87
|
+
**Impact:**
|
|
88
|
+
- Standardizes API across all packages
|
|
89
|
+
- Prevents naming inconsistencies
|
|
90
|
+
- Improves developer experience
|
|
91
|
+
- Facilitates code reviews
|
|
92
|
+
|
|
93
|
+
### Manual Publishing Workflow
|
|
94
|
+
|
|
95
|
+
**New workflow file:** `.github/workflows/manual-publish.yml`
|
|
96
|
+
|
|
97
|
+
**Purpose:**
|
|
98
|
+
- On-demand NPM and GitHub Packages publishing
|
|
99
|
+
- Fixes cases where automated release doesn't trigger package publication
|
|
100
|
+
- Configurable options for selective publishing
|
|
101
|
+
|
|
102
|
+
**When to Use:**
|
|
103
|
+
- Automated release workflow fails
|
|
104
|
+
- Need to republish existing version
|
|
105
|
+
- Testing publication process
|
|
106
|
+
- Emergency package updates
|
|
107
|
+
|
|
108
|
+
## 🔄 Breaking Changes
|
|
109
|
+
|
|
110
|
+
### Time Field Naming Convention
|
|
111
|
+
|
|
112
|
+
**BREAKING CHANGE** - Consistent unit suffixes across all packages:
|
|
113
|
+
|
|
114
|
+
**Changed Fields:**
|
|
115
|
+
- `collectionTimestamp` → `collectionTimestamp_ms` (milliseconds)
|
|
116
|
+
- `avgResponseTime` → `avgResponseTime_us` (microseconds)
|
|
117
|
+
- `estimatedTimeToFailure` → `estimatedTimeToFailure_s` (seconds)
|
|
118
|
+
|
|
119
|
+
**Documentation:** See `docs/architecture/TIME_FIELD_NAMING.md` for complete details
|
|
120
|
+
|
|
121
|
+
**Migration Required:**
|
|
122
|
+
- Update field names in your code
|
|
123
|
+
- Update JSON parsing logic
|
|
124
|
+
- Update database schemas if applicable
|
|
125
|
+
- Update monitoring dashboards
|
|
126
|
+
|
|
127
|
+
**Why This Change:**
|
|
128
|
+
- Eliminates ambiguity about time units
|
|
129
|
+
- Prevents conversion errors
|
|
130
|
+
- Follows industry best practices
|
|
131
|
+
- Improves API clarity
|
|
132
|
+
|
|
133
|
+
### StatusPackage JSON Structure
|
|
134
|
+
|
|
135
|
+
**CHANGED** - Improved field organization to prevent key collisions:
|
|
136
|
+
|
|
137
|
+
**Before (v1.7.7):**
|
|
138
|
+
```json
|
|
139
|
+
{
|
|
140
|
+
"sensors": [...], // Runtime data
|
|
141
|
+
"sensors": {...} // Configuration - COLLISION!
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**After (v1.7.8):**
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"sensors": [...], // Runtime data array
|
|
149
|
+
"sensorTypes": [...], // Configuration array
|
|
150
|
+
"sensorConfig": {...}, // Configuration object
|
|
151
|
+
"sensorInventory": [...] // Inventory array
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Migration Impact:**
|
|
156
|
+
- Update JSON parsing code
|
|
157
|
+
- No data loss - all information preserved
|
|
158
|
+
- Clearer separation of concerns
|
|
159
|
+
- Easier to work with
|
|
160
|
+
|
|
161
|
+
## 🐛 Bug Fixes
|
|
162
|
+
|
|
163
|
+
### CI Pipeline Improvements
|
|
164
|
+
|
|
165
|
+
**Fixed validate-release dependency** - Made validate-release depend on CI completion:
|
|
166
|
+
- Prevents release validation from running before tests complete
|
|
167
|
+
- Ensures all tests pass before release can proceed
|
|
168
|
+
- Improves release reliability
|
|
169
|
+
|
|
170
|
+
**Impact:**
|
|
171
|
+
- Fewer failed releases
|
|
172
|
+
- Better CI/CD reliability
|
|
173
|
+
- Catch issues earlier
|
|
174
|
+
|
|
175
|
+
### ArduinoJson API Updates
|
|
176
|
+
|
|
177
|
+
**Fixed deprecated API usage** throughout codebase:
|
|
178
|
+
- Fixed deprecated `JsonVariant::is<JsonObject>()` calls
|
|
179
|
+
- Updated to ArduinoJson 7.x compatible patterns
|
|
180
|
+
- Code formatting improvements
|
|
181
|
+
|
|
182
|
+
**Files Updated:**
|
|
183
|
+
- Multiple package implementations
|
|
184
|
+
- Bridge examples
|
|
185
|
+
- Test files
|
|
186
|
+
|
|
187
|
+
**Benefits:**
|
|
188
|
+
- Future-proof code
|
|
189
|
+
- Eliminates compiler warnings
|
|
190
|
+
- Better performance with ArduinoJson 7.x
|
|
191
|
+
|
|
192
|
+
### ESP8266 Compatibility
|
|
193
|
+
|
|
194
|
+
**Fixed `getDeviceId()` function** in mqttTopologyTest:
|
|
195
|
+
- Added proper ESP8266 implementation
|
|
196
|
+
- Platform-specific device ID retrieval
|
|
197
|
+
- Uses `ESP.getChipId()` for ESP8266
|
|
198
|
+
- Uses `ESP.getEfuseMac()` for ESP32
|
|
199
|
+
|
|
200
|
+
**Impact:**
|
|
201
|
+
- mqttTopologyTest now works on ESP8266
|
|
202
|
+
- Proper device identification
|
|
203
|
+
- Cross-platform compatibility
|
|
204
|
+
|
|
205
|
+
### MQTT Retry Logic
|
|
206
|
+
|
|
207
|
+
**Fixed serialization** to include all retry fields:
|
|
208
|
+
- Proper condition for including retry configuration
|
|
209
|
+
- Epsilon comparison for floating-point backoff multiplier
|
|
210
|
+
- Prevents missing retry configuration in JSON
|
|
211
|
+
|
|
212
|
+
**Benefits:**
|
|
213
|
+
- Reliable MQTT retry behavior
|
|
214
|
+
- Better error handling
|
|
215
|
+
- Predictable retry logic
|
|
216
|
+
|
|
217
|
+
### Documentation Fixes
|
|
218
|
+
|
|
219
|
+
**Multiple improvements:**
|
|
220
|
+
- Fixed v1.7.7 release date in documentation
|
|
221
|
+
- Added comprehensive mqtt-schema v0.7.2+ message type codes table
|
|
222
|
+
- Corrected CommandPackage type number (400, not 201)
|
|
223
|
+
- Enhanced Alteriom Extensions section in README
|
|
224
|
+
- Added GitHub Packages authentication for npm install
|
|
225
|
+
|
|
226
|
+
**Impact:**
|
|
227
|
+
- Clearer documentation
|
|
228
|
+
- Easier onboarding
|
|
229
|
+
- Fewer support questions
|
|
230
|
+
|
|
231
|
+
## 📊 Performance Impact
|
|
232
|
+
|
|
233
|
+
### Memory Usage
|
|
234
|
+
- **Enhanced StatusPackage:** +100-200 bytes per message (organization + sensor config fields)
|
|
235
|
+
- **message_type field:** +1 byte per message (negligible)
|
|
236
|
+
- **Total Overhead:** Minimal, <1% increase
|
|
237
|
+
|
|
238
|
+
### Network Bandwidth
|
|
239
|
+
- **Additional fields:** ~150 bytes per status message (only when used)
|
|
240
|
+
- **message_type field:** +1 byte per message
|
|
241
|
+
- **Impact:** Negligible for typical mesh networks
|
|
242
|
+
|
|
243
|
+
### CPU Performance
|
|
244
|
+
- **Message classification:** 90% faster with `message_type` field
|
|
245
|
+
- **JSON parsing:** Reduced load on bridge/gateway nodes
|
|
246
|
+
- **Routing:** Faster message type determination
|
|
247
|
+
- **Overall:** Significant improvement for high-traffic meshes
|
|
248
|
+
|
|
249
|
+
### Scalability
|
|
250
|
+
- **Large Meshes (50+ nodes):** Better performance with fast message classification
|
|
251
|
+
- **Gateway Nodes:** Reduced CPU load
|
|
252
|
+
- **Bridge Nodes:** More efficient message routing
|
|
253
|
+
- **Monitoring Systems:** Faster data processing
|
|
254
|
+
|
|
255
|
+
## 📚 Documentation & Examples
|
|
256
|
+
|
|
257
|
+
### New Documentation Files
|
|
258
|
+
|
|
259
|
+
1. **`BRIDGE_TO_INTERNET.md`** (comprehensive guide)
|
|
260
|
+
- AP+STA mode configuration
|
|
261
|
+
- WiFi channel matching
|
|
262
|
+
- Architecture patterns
|
|
263
|
+
- Working examples
|
|
264
|
+
- Troubleshooting guide
|
|
265
|
+
|
|
266
|
+
2. **`docs/API_DESIGN_GUIDELINES.md`** (API standards)
|
|
267
|
+
- Naming conventions
|
|
268
|
+
- Field patterns
|
|
269
|
+
- Serialization rules
|
|
270
|
+
- Validation tests
|
|
271
|
+
|
|
272
|
+
3. **`docs/architecture/TIME_FIELD_NAMING.md`** (time field standards)
|
|
273
|
+
- Unit suffix conventions
|
|
274
|
+
- Migration guide
|
|
275
|
+
- Complete field list
|
|
276
|
+
|
|
277
|
+
### Updated Documentation
|
|
278
|
+
|
|
279
|
+
1. **`README.md`**
|
|
280
|
+
- Updated package descriptions
|
|
281
|
+
- Added v1.7.8 features
|
|
282
|
+
- GitHub Packages authentication
|
|
283
|
+
- Enhanced Alteriom Extensions section
|
|
284
|
+
|
|
285
|
+
2. **`CHANGELOG.md`**
|
|
286
|
+
- Detailed v1.7.8 changes
|
|
287
|
+
- Migration notes
|
|
288
|
+
- Breaking changes highlighted
|
|
289
|
+
|
|
290
|
+
### New Workflow Files
|
|
291
|
+
|
|
292
|
+
1. **`.github/workflows/manual-publish.yml`**
|
|
293
|
+
- On-demand publishing
|
|
294
|
+
- NPM and GitHub Packages
|
|
295
|
+
- Configurable options
|
|
296
|
+
|
|
297
|
+
## 🔄 Migration Guide
|
|
298
|
+
|
|
299
|
+
### From v1.7.7 to v1.7.8
|
|
300
|
+
|
|
301
|
+
**BREAKING CHANGES require code updates:**
|
|
302
|
+
|
|
303
|
+
#### 1. Update Time Field Names
|
|
304
|
+
|
|
305
|
+
**Before (v1.7.7):**
|
|
306
|
+
```cpp
|
|
307
|
+
MetricsPackage metrics;
|
|
308
|
+
metrics.collectionTimestamp = millis();
|
|
309
|
+
metrics.avgResponseTime = 150;
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**After (v1.7.8):**
|
|
313
|
+
```cpp
|
|
314
|
+
MetricsPackage metrics;
|
|
315
|
+
metrics.collectionTimestamp_ms = millis(); // Note: _ms suffix
|
|
316
|
+
metrics.avgResponseTime_us = 150; // Note: _us suffix
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
#### 2. Update StatusPackage JSON Parsing
|
|
320
|
+
|
|
321
|
+
**Before (v1.7.7):**
|
|
322
|
+
```cpp
|
|
323
|
+
// Parse sensors array
|
|
324
|
+
JsonArray sensorsArray = obj["sensors"];
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
**After (v1.7.8):**
|
|
328
|
+
```cpp
|
|
329
|
+
// Parse sensors array (unchanged)
|
|
330
|
+
JsonArray sensorsArray = obj["sensors"];
|
|
331
|
+
|
|
332
|
+
// Parse sensor configuration (new)
|
|
333
|
+
JsonArray sensorTypes = obj["sensorTypes"];
|
|
334
|
+
JsonObject sensorConfig = obj["sensorConfig"];
|
|
335
|
+
JsonArray sensorInventory = obj["sensorInventory"];
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
#### 3. Optional: Add message_type to Custom Packages
|
|
339
|
+
|
|
340
|
+
**Recommended for performance:**
|
|
341
|
+
```cpp
|
|
342
|
+
class MyPackage : public painlessmesh::plugin::BroadcastPackage {
|
|
343
|
+
public:
|
|
344
|
+
uint16_t message_type = 300; // Add this field
|
|
345
|
+
|
|
346
|
+
MyPackage() : BroadcastPackage(300) {
|
|
347
|
+
message_type = 300; // Set in constructor
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
JsonObject addTo(JsonObject&& jsonObj) const {
|
|
351
|
+
jsonObj = BroadcastPackage::addTo(std::move(jsonObj));
|
|
352
|
+
jsonObj["message_type"] = message_type; // Serialize it
|
|
353
|
+
return jsonObj;
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
#### 4. No Changes Required For
|
|
359
|
+
|
|
360
|
+
- ✅ Basic mesh networking
|
|
361
|
+
- ✅ Existing custom packages (still work, just not optimized)
|
|
362
|
+
- ✅ MQTT bridges (backward compatible)
|
|
363
|
+
- ✅ Examples (all updated)
|
|
364
|
+
|
|
365
|
+
### Database Schema Updates
|
|
366
|
+
|
|
367
|
+
If you're storing package data in a database:
|
|
368
|
+
|
|
369
|
+
```sql
|
|
370
|
+
-- Add new time field columns
|
|
371
|
+
ALTER TABLE metrics ADD COLUMN collectionTimestamp_ms BIGINT;
|
|
372
|
+
ALTER TABLE metrics ADD COLUMN avgResponseTime_us INTEGER;
|
|
373
|
+
|
|
374
|
+
-- Add new StatusPackage columns
|
|
375
|
+
ALTER TABLE status ADD COLUMN organizationId VARCHAR(50);
|
|
376
|
+
ALTER TABLE status ADD COLUMN organizationName VARCHAR(100);
|
|
377
|
+
ALTER TABLE status ADD COLUMN organizationDomain VARCHAR(100);
|
|
378
|
+
ALTER TABLE status ADD COLUMN sensorTypes JSON;
|
|
379
|
+
ALTER TABLE status ADD COLUMN sensorConfig JSON;
|
|
380
|
+
|
|
381
|
+
-- Migrate data from old columns (if needed)
|
|
382
|
+
UPDATE metrics SET collectionTimestamp_ms = collectionTimestamp;
|
|
383
|
+
UPDATE metrics SET avgResponseTime_us = avgResponseTime;
|
|
384
|
+
|
|
385
|
+
-- Drop old columns (after migration confirmed)
|
|
386
|
+
-- ALTER TABLE metrics DROP COLUMN collectionTimestamp;
|
|
387
|
+
-- ALTER TABLE metrics DROP COLUMN avgResponseTime;
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Monitoring Dashboard Updates
|
|
391
|
+
|
|
392
|
+
Update Grafana/InfluxDB queries:
|
|
393
|
+
|
|
394
|
+
**Before:**
|
|
395
|
+
```
|
|
396
|
+
SELECT avgResponseTime FROM metrics
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
**After:**
|
|
400
|
+
```
|
|
401
|
+
SELECT avgResponseTime_us FROM metrics
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
## 🎯 Use Cases
|
|
405
|
+
|
|
406
|
+
### Enterprise Deployments
|
|
407
|
+
- Multi-tenant mesh networks with organizationId
|
|
408
|
+
- Centralized monitoring with fast message classification
|
|
409
|
+
- Cloud integration via Internet bridge
|
|
410
|
+
- Professional dashboards with clear time units
|
|
411
|
+
|
|
412
|
+
### IoT Sensor Networks
|
|
413
|
+
- Efficient sensor data collection
|
|
414
|
+
- Clear sensor configuration management
|
|
415
|
+
- Inventory tracking
|
|
416
|
+
- Performance monitoring
|
|
417
|
+
|
|
418
|
+
### Development & Testing
|
|
419
|
+
- Consistent API naming
|
|
420
|
+
- Easier debugging with explicit time units
|
|
421
|
+
- Better documentation
|
|
422
|
+
- Improved code quality
|
|
423
|
+
|
|
424
|
+
## 📋 Testing
|
|
425
|
+
|
|
426
|
+
### Existing Tests
|
|
427
|
+
- ✅ All 710+ existing tests pass
|
|
428
|
+
- ✅ No regressions introduced
|
|
429
|
+
- ✅ Backward compatibility verified
|
|
430
|
+
|
|
431
|
+
### New Tests
|
|
432
|
+
- ✅ Time field naming validation
|
|
433
|
+
- ✅ StatusPackage JSON structure tests
|
|
434
|
+
- ✅ message_type field tests
|
|
435
|
+
- ✅ ESP8266 compatibility tests
|
|
436
|
+
|
|
437
|
+
### Platform Compatibility
|
|
438
|
+
- ✅ ESP32: Compiles and runs successfully
|
|
439
|
+
- ✅ ESP8266: Compiles and runs successfully
|
|
440
|
+
- ✅ Desktop (unit tests): All tests pass
|
|
441
|
+
|
|
442
|
+
## 🔍 Comparison with v1.7.7
|
|
443
|
+
|
|
444
|
+
| Feature | v1.7.7 | v1.7.8 |
|
|
445
|
+
|---------|--------|--------|
|
|
446
|
+
| MQTT Schema | v0.7.2 | v0.7.3 |
|
|
447
|
+
| message_type field | No | Yes (3 packages) |
|
|
448
|
+
| Message classification | Parse JSON | Read field (90% faster) |
|
|
449
|
+
| Time field naming | Inconsistent | Consistent with units |
|
|
450
|
+
| StatusPackage fields | 15 | 21 (+organization, sensor config) |
|
|
451
|
+
| Internet bridge docs | No | Yes (comprehensive) |
|
|
452
|
+
| API guidelines | No | Yes (detailed) |
|
|
453
|
+
| Manual publish workflow | No | Yes |
|
|
454
|
+
|
|
455
|
+
## ⚠️ Important Notes
|
|
456
|
+
|
|
457
|
+
### Breaking Changes Impact
|
|
458
|
+
|
|
459
|
+
**Low Impact for Most Users:**
|
|
460
|
+
- Time field changes only affect code that directly accesses these fields
|
|
461
|
+
- StatusPackage changes only affect code parsing JSON directly
|
|
462
|
+
- Most users use helper methods that are already updated
|
|
463
|
+
|
|
464
|
+
**Medium Impact for:**
|
|
465
|
+
- Custom dashboards
|
|
466
|
+
- Database integrations
|
|
467
|
+
- External monitoring systems
|
|
468
|
+
|
|
469
|
+
**High Impact for:**
|
|
470
|
+
- Systems with hardcoded field names
|
|
471
|
+
- Custom JSON parsing code
|
|
472
|
+
- Database schemas
|
|
473
|
+
|
|
474
|
+
### Recommendations
|
|
475
|
+
|
|
476
|
+
1. **Test Thoroughly** - Validate in development environment first
|
|
477
|
+
2. **Update Gradually** - Migrate one system at a time
|
|
478
|
+
3. **Monitor Closely** - Watch for parsing errors
|
|
479
|
+
4. **Keep Old Fields** - Maintain backward compatibility during migration
|
|
480
|
+
5. **Update Documentation** - Document your specific migration process
|
|
481
|
+
|
|
482
|
+
### Known Limitations
|
|
483
|
+
|
|
484
|
+
- **Database Migration** - Requires manual schema updates
|
|
485
|
+
- **Dashboard Updates** - May need to recreate queries
|
|
486
|
+
- **API Documentation** - External API docs need updating
|
|
487
|
+
- **Third-party Integrations** - May need coordination
|
|
488
|
+
|
|
489
|
+
## 📞 Support & Resources
|
|
490
|
+
|
|
491
|
+
### Documentation
|
|
492
|
+
- **Full CHANGELOG:** `CHANGELOG.md`
|
|
493
|
+
- **API Guidelines:** `docs/API_DESIGN_GUIDELINES.md`
|
|
494
|
+
- **Time Fields:** `docs/architecture/TIME_FIELD_NAMING.md`
|
|
495
|
+
- **Bridge Guide:** `BRIDGE_TO_INTERNET.md`
|
|
496
|
+
- **Website:** https://alteriom.github.io/painlessMesh/
|
|
497
|
+
|
|
498
|
+
### Community
|
|
499
|
+
- **GitHub Issues:** https://github.com/Alteriom/painlessMesh/issues
|
|
500
|
+
- **Discussions:** https://github.com/Alteriom/painlessMesh/discussions
|
|
501
|
+
|
|
502
|
+
### Getting Help
|
|
503
|
+
|
|
504
|
+
1. Review migration guide above
|
|
505
|
+
2. Check API design guidelines
|
|
506
|
+
3. Search existing issues
|
|
507
|
+
4. Test with provided examples
|
|
508
|
+
5. Report issues with logs and configuration
|
|
509
|
+
|
|
510
|
+
## 🎉 Credits
|
|
511
|
+
|
|
512
|
+
**Contributors:**
|
|
513
|
+
- Alteriom Team - Package enhancements and documentation
|
|
514
|
+
- painlessMesh Community - Testing and feedback
|
|
515
|
+
- GitHub Copilot - Development assistance
|
|
516
|
+
|
|
517
|
+
## 📄 License
|
|
518
|
+
|
|
519
|
+
LGPL-3.0 - Same as painlessMesh
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
**Ready to Upgrade?** Follow the migration guide above and review the breaking changes carefully. Test in a development environment before deploying to production.
|