v3.14.3 – Fix persistent unavailable state
Critical Fix
All Audac entities stuck as unavailable despite devices being reachable.
Root cause
COMMAND_TIMEOUT (single TCP command) was 25 seconds. When the TCP connection hangs, one command holds the async lock for 25s — blocking ALL subsequent commands. With GET_ALL_ZONES_TIMEOUT also at 25s, the overall poll times out before the stuck command even releases the lock.
Result: Both coordinators (MTX + XMP44) cascade into permanent timeout loops.
Fix
| Timeout | Before (broken) | After (fixed) | Purpose |
|---|---|---|---|
COMMAND_TIMEOUT |
25s | 5s | Single command — fail fast on hung connections |
GET_ALL_ZONES_TIMEOUT |
25s | 45s | MTX all 8 zones — allow individual retries |
GET_ALL_SLOTS_TIMEOUT |
45s | 45s | XMP44 all 4 slots (unchanged) |
UPDATE_TIMEOUT |
35s | 55s | Coordinator cycle — must exceed inner timeouts |
Why this works
A hung command now fails in 5s instead of 25s, freeing the lock immediately. The next command can proceed. Even if 2-3 commands fail, the overall 45s timeout has plenty of room for the remaining zones to complete normally.