dcc528b96a
Root cause: 3 BMS devices fighting for 3 ESPHome proxy connection slots simultaneously, causing 80% timeout failures and 22s+ poll times. Fixes: - Add shared asyncio.Lock so only one BMS polls at a time — eliminates proxy slot contention entirely - Pass ble_device_callback to establish_connection so retry attempts get a fresh BLEDevice (handles proxy path changes) - Reduce command timeout 5s -> 3s, retries 3 -> 2 (BMS responds in <200ms when connection is clean) - Reduce establish_connection max_attempts 3 -> 2 (fail fast, retry next cycle instead of blocking 25s) - Fixed poll timeout to 15s (was poll_interval-5=25s) Expected: polls complete in 2-5s instead of 22s, ~95%+ success rate. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>