Home / Knowledge Base / Battery & Energy Storage

How to Fix Modbus “Queue Full” & Dropouts in Solar Assistant / HA

TROUBLESHOOTING Applies to: Solar Assistant, Home Assistant, Node-RED, RS485 Networks
⚡ TL;DR Diagnostic Quick-Card
Symptom:
Dashboard works great at night or on low load but randomly crashes, drops connections or flatlines during peak solar generation.
Diagnostic Log:
ModbusTcpClient failed | Modbus update failed: Queue Full
Root Cause:
The host software is sending requests faster than the physical 9600bps RS485 wire can process. Queries pile up in the OS buffer until it overflows and drops the serial connection.

This 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.

Home Assistant / Solar Assistant System Log
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.

💻 Home Assistant YAML: Anti-Flood Tuning Open-Source
# 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
The Compromise: Losing Real-Time Control

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.

❌ Standard USB / Transparent Hubs
  • 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.
✅ Valtoris Storage Modbus Gateway
  • 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.

Stop Throttling Your Data Collection

How is your inverter connected? Choose your integration path below to eliminate Modbus timeouts:

Not sure which one to pick? Consult an Engineer