Ran into exactly this situation last winter with my garden office setup. Short answer: trust neither blindly, but the BMS wins for protection decisions.
Here's my reasoning. The SmartShunt is a coulomb counter — it's tracking charge in and out with reasonable accuracy, but it drifts over time if your peukert exponent isn't dialled in correctly, or if you're not hitting a proper absorption cycle regularly enough to reset the 100% reference point. Mine was reading 6-8% optimistic after a run of overcast days.
The BMS, on the other hand, is measuring cell voltages directly. It doesn't care about accumulated counting errors. What it does struggle with is the flat voltage curve you get with LiFePO4 — a small voltage difference in the middle of the curve represents a huge SOC swing, so its readings can look jumpy.
My current approach:
- SmartShunt handles day-to-day monitoring and feeds MQTT data into my Home Assistant dashboard
- BMS cell voltage readings are what actually trigger any load shedding or charge limiting
- I let a full absorption cycle run every couple of weeks specifically to resync the shunt
Worth checking a few things in Victron's VictronConnect app — make sure your battery capacity figure is accurate, and that the charged voltage threshold matches what your BMS considers full. A lot of discrepancy comes down to misconfigured parameters rather than either device actually being wrong.
What BMS are you running? JK, Daly, something else? Makes a difference in terms of how accurate the voltage-based SOC estimation actually is.