v3.12.0 – GZI0x per-zone polling (more resilient, simpler)
Major improvement
Complete rewrite of the MTX polling strategy. Replaces the bulk query approach (GVALL/GRALL/GMALL + individual bass/treble) with per-zone GZI0x queries.
Why this is better
| Old (bulk) | New (GZI0x) | |
|---|---|---|
| Commands per poll | 3-19 (with cache) | 8 (always) |
| Duration | ~2-20s (varies) | ~5-6s (consistent) |
| Failure impact | One garbled GVALL → all zones lost | One failed zone → only that zone keeps previous data |
| Bass/treble | Cached, stale 80% of time | Always fresh |
| Code complexity | 264 lines, cache logic, bulk fallback | 183 lines, simple loop |
How it works
Each zone is queried individually with GZI0x, which returns all 5 values in one response:
GZI01 → volume^routing^mute^bass^treble
If a single zone fails to respond:
- That zone keeps its previous data (passed via
previousparameter) - All other zones update normally
- A warning is logged:
MTX: 1/8 zones returned no data, kept previous state: [3]
This eliminates the intermittent status loss (0/6 zones) that occurred when a bulk response was garbled.