Had this exact headache last winter with my cabin setup. Short answer — neither is perfect, but they're measuring different things which is why they disagree.
The BMV-712 is doing coulomb counting from the shunt, so it's tracking charge in vs charge out. Dead accurate if you've got your settings dialled in correctly (peukert exponent, charged voltage threshold, tail current). If those are off, the drift compounds over time.
Your BMS is typically working off cell voltages and its own internal model. Depending on the BMS quality, that can be quite rough — especially mid-range where LiFePO4 voltage curves are almost flat.
What I found helped:
- Make sure the BMV syncs properly at full charge — that resets the drift
- Set your tail current low enough that it actually detects full charge and syncs
- Don't trust either reading heavily between about 20–80% on LFP, voltage-based readings are basically useless there
For day-to-day I watch the BMV-712. It's the more reliable instrument if configured right. The BMS SOC I treat more as a sanity check or early warning system.
What BMS are you running? Some of the cheaper units (looking at you, generic Alibaba boards) have genuinely terrible SOC algorithms. If you're on something like a Daly or JK that might explain the gap.
Anyone else found a reliable way to get the two to agree consistently? Curious whether integrating via Victron's Cerbo changes anything for people.