Hey everyone!
Like many of you, I have a bank of VTAC LiFePO4 batteries (specifically the VT-16076B / VT-16076W). Under the hood, these use what appears to be a highly locked-down, custom implementation of a PACE BMS. We can’t natively configure it, and I was completely unable to get any data out of the physical RS485 or RS232 ports on the batteries themselves.
I was incredibly frustrated that there was no local, cloud-free way to deeply monitor these batteries in Home Assistant. So, I spent the last few weeks reverse-engineering their native Bluetooth Low Energy (BLE) protocol from scratch to bypass the physical ports and build a fully custom ESPHome integration.
GitHub Repository: GitHub - jagdeepsingh02/esphome-vtac-bms-bth-gateway · GitHub
What it does: Instead of flooding the battery with commands (which often crashes the Bluetooth module), this integration uses a highly optimized C++ parser in ESPHome to carefully juggle fast/slow polling loops natively over BLE.
Features:
- Native Parallel Support: It connects to your Master battery via Bluetooth, and automatically reads the data for up to 15 Slave batteries over your existing internal wiring!
- Deep Telemetry: Accurately decodes Pack Voltage, Current, precise SOC, Remaining Capacity, and Alarms.
- Cell-Level Diagnostics: Reads all 16 individual Cell Voltages and 6+ Temperature probes per battery.
- Virtual Smart Sensors: It automatically calculates Instantaneous Power (W), live Time to Empty/Full (h), precise Cycle Counts, and actively tracks Cell Imbalance (mV) to let you know if a specific cell is drifting!
I’ve fully documented all the byte offsets and Modbus hex structures in the repository if anyone wants to adapt this for similar locked-down systems. It currently runs flawlessly on an ESP32.
If you have VTAC low-voltage batteries, I’d love for you to test it out and let me know how it works for you!