How to Fix Modbus “Queue Full” & Dropouts in Solar Assistant / HA
ModbusTcpClient failed | Modbus update failed: Queue FullThis is a frustratingly familiar situation. When the system load is low or at night, your local monitoring setup works well. But around 1:00 PM, when the sun is at its peak and your inverters and BMS are working hard, your Solar Assistant or Home Assistant dashboard goes dead.
2026-07-15 13:02:14 ERROR (MainThread) [modbus] Pymodbus: Modbus Error: [Connection] ModbusTcpClient failed 2026-07-15 13:02:16 WARNING (MainThread) [modbus] Modbus update failed: Queue Full 2026-07-15 13:02:18 ERROR (MainThread) [modbus] Dropping packets: RS485 Bus Timeout
You haven’t wired anything wrong, and your equipment isn’t broken. You are experiencing a Modbus RTU Channel Flood.
The Root Cause: The Baud Rate Bottleneck
RS485 is a half-duplex communication standard. This means only one device can talk at a time. Most legacy solar equipment (like Pylontech batteries, Deye/Growatt inverters) communicate at a sluggish 9600 bps.
During peak solar generation, the internal state of these devices changes wildly every millisecond. If your software (like Home Assistant) is aggressively polling 50 different registers across 3 different devices every second, the physical wire literally cannot carry the data fast enough.
The queries pile up in the software’s queue until the memory buffer overflows, causing the OS to panic and drop the serial connection entirely.
Option A: The Free Software Fix (Tuning the Polling Cycle)
To stop the crashing, you must force your monitoring software to “breathe” by adding mandatory delays between queries. This prevents the queue from filling up.
# In your configuration.yaml, add these critical delays to your modbus hub modbus: - name: solar_hub type: serial port: /dev/ttyUSB0 baudrate: 9600 bytesize: 8 method: rtu parity: N stopbits: 1 timeout: 5 # Increase timeout to 5 seconds message_wait_milliseconds: 200 # Force a 200ms pause between EVERY query sensors: - name: "Grid Power" address: 86 scan_interval: 10 # Do not poll faster than every 10 seconds
While tweaking the YAML fixes the crashes, it ruins your data resolution. If you are trying to implement Zero-Export control or dynamic EV charging, relying on data that is 10 seconds old is unacceptable. By the time your software tells the inverter to throttle down, you have already exported power to the grid.
Option B: Hardware Memory Caching (The Ultimate Fix)
If you want sub-second data resolution without crashing your monitoring software, you must decouple the slow RS485 bus from your fast IT network using a Storage Modbus Gateway.
- Software asks for data -> Waits for slow 9600bps RS485 response.
- Software is held hostage by physical wire limits.
- High risk of queue overflow and dropped packets.
- Gateway actively polls RS485 autonomously and caches data in its 10K memory.
- Software asks for data -> Gateway replies from RAM instantly.
- Zero delays. Sub-3ms response times over TCP/IP.
