Seplos BMS V3 (Mason/10E): all 16 cell voltages with plain Modbus YAML - no custom component, no ESP, no MQTT

After a week of chasing a phantom “broken discharge FET” on my Seplos Mason 280 (10E BMS, 16S LiFePO4, 314 Ah), I ended up reverse-verifying the whole Seplos BMS 3.0 Modbus protocol against the live pack - and it turns out you can get everything into Home Assistant with nothing but the built-in modbus integration. No HACS custom component, no ESP32, no MQTT bridge, no Windows software.

Plug a USB-RS485 adapter into your HA machine, paste one YAML block, restart: 28 entities, including all 16 cell voltages, SOC/SOH/cycles, MOSFET temperature and - the part I really wanted - the charge/discharge FET states and protection bits as binary sensors.

Full write-up, tested YAML and a standalone diagnostic script:
:point_right: GitHub - rolandfiege69-svg/seplos-v3-ha-modbus: Seplos BMS V3 (Mason/10E) in Home Assistant with plain Modbus YAML - no custom component, no ESP, no MQTT. All 16 cell voltages, FET states, full register map. · GitHub

The hard-won facts nobody had posted in one place (this forum’s older Seplos V3 Modbus thread died unanswered):

  • BMS 3.0 firmware does not answer the old Seplos ASCII protocol (~2000... frames) - it ignores them silently. If your V3 pack seems “dead” on RS485, that is why. It speaks Modbus RTU, 19200 8N1 on the RS485-1 port.
    • Slave address = DIP switch address. All DIP off = address 0, and yes, the pack really answers on 0 (the nominal broadcast address) - works fine with HA/pymodbus.
    • Input registers (fc 0x04): 0x1000 pack voltage (0.01 V), 0x1001 current signed (0.01 A), 0x1002 remaining capacity, 0x1005 SOC (0.1 %), 0x1006 SOH, 0x1007 cycles, 0x1100-0x110F cell voltages 1-16 (mV), 0x1118 MOSFET temp, 0x1119 ambient temp (0.1 K).
    • Coils (fc 0x01, base 0x1200): offset 120 = discharge FET, 121 = charge FET, 64/65/68 = discharging/charging/idle.
    • RJ45 pinout on the BMS: pin 1 = B-, pin 2 = A+, pins 3/6 = GND. The USB adapter Seplos ships in the box works out of the box.
      Verified end-to-end on HA OS (Raspberry Pi, Core 2026.7) under a 15 kW load test. Caveat: register/coil map verified on one Mason 280/10E pack - reports from other packs and firmware versions are very welcome, especially the coil offsets.

Bonus war story: the “broken” battery was fine all along - the real bug was the Deye inverter’s Time-of-Use setting (Disabled = battery is backup-only and never discharges grid-parallel). The BMS data proved the pack innocent in five minutes. That is exactly why having FET states and protection bits in HA is worth it.