· HeliKeep · Troubleshooting · 4 min read
Why Your EPEVER Shows 50% When Your Battery is Actually Full
The EPEVER SOC reading is wrong — and it is not your fault. Here is why voltage-based SOC without coulomb counting fails, and what to use instead.
You’ve got a sunny day. Your solar panel has been pumping power into your battery for hours. The charge controller is in Float mode — which means the battery should be 100% full.
But the EPEVER display says 50%. Or 65%. Or some other number that makes no sense.
You’re not imagining it. The EPEVER SOC reading is wrong. Here’s why, and what to use instead.
Why EPEVER’s SOC Is Inaccurate
EPEVER charge controllers (Tracer AN, BN, and others) estimate State of Charge (SOC) using a voltage-based lookup table. The problem is that this table is calibrated for a specific battery chemistry — and it doesn’t match most real-world batteries.
The specific issues:
1. Wrong battery profile
EPEVER’s “Sealed” battery setting uses a voltage-to-SOC curve that’s too conservative. It expects higher voltages for 100% than most Calcium and Sealed batteries actually produce. So even when your battery is fully charged and at rest reading 12.7V, the controller might report 80% instead of 100%.
2. No resting voltage compensation
True SOC from voltage requires the battery to be at rest — no charging and no significant load — for at least 30 minutes. During charging, voltage is elevated by 0.5-1.0V above the true resting voltage. During heavy load, voltage sags below the true resting value.
EPEVER reads voltage in real-time without compensating for this. So during active charging (when voltage might be 14.4V), the SOC might read 100%. Ten minutes after sunset, as surface charge dissipates and voltage drops from 13.8V to 12.6V, the SOC might plummet from 100% to 65% — even though the battery hasn’t actually discharged at all.
3. No coulomb counting
High-end battery monitors (like Victron’s BMV-712) use a shunt resistor to measure every amp flowing in and out of the battery. This “coulomb counting” gives much more accurate SOC. EPEVER controllers don’t do this — they only have voltage to work with, and voltage alone is a poor SOC indicator during active use.
What the Numbers Actually Mean
Here’s what your EPEVER might show vs. reality, for a typical Calcium/Sealed 12V battery:
| Scenario | EPEVER Says | Reality |
|---|---|---|
| Full charge, Float mode, sunny day | 95-100% | ~100% (correct, by coincidence) |
| Just after sunset, surface charge dissipating | 60-75% | Still ~100% (surface charge drop is normal) |
| Overnight, light load (router only) | 50-65% | 90-95% (battery barely discharged) |
| Morning before sunrise, after full night | 40-55% | 80-90% (depends on load) |
| Actually depleted battery | 30-40% | 30-40% (more accurate at low SOC) |
The EPEVER SOC is most inaccurate in the 70-100% range and becomes more accurate as the battery gets lower. This is the worst possible behavior — it cries wolf all the time, so you stop trusting it, and then when it finally reads low, you might ignore it.
What to Use Instead: Voltage
Resting voltage is the simplest reliable indicator of battery health. “Resting” means:
- No active charging (PV power = 0W or very low)
- No heavy load (a small router is OK)
- At least 30 minutes since the last significant charge or discharge event
| Resting Voltage | Approximate SOC | What It Means |
|---|---|---|
| 12.7-12.8V | 100% | Fully charged |
| 12.5V | ~80% | Healthy, no concern |
| 12.3V | ~60% | Fine for daily cycling |
| 12.2V | ~50% | Lower limit for regular use |
| 11.8V | ~20% | Critical — stop discharging NOW |
| 11.5V | ~5% | Damage occurring |
The surface charge gotcha
After sunset, your battery voltage will drop rapidly from ~13.8V (float voltage) to ~12.6V over about 1-2 hours. This is normal. It’s called “surface charge dissipation” and it’s not actual discharge.
True discharge only begins once the voltage stabilizes below ~12.7V and starts a slow, steady decline. If you check at 10 PM and see 12.65V, your battery is still essentially full.
How Helikeep Handles This
Helikeep reads the EPEVER’s SOC register (we show it as “Controller SOC” for reference), but we also calculate our own voltage-based SOC that’s calibrated for your specific battery type.
More importantly, Helikeep’s battery protection doesn’t rely on SOC at all. It watches raw voltage:
- Below 12.1V — load is automatically cut (for Calcium/Sealed batteries)
- Above 12.4V — load is automatically restored
No guesswork, no inaccurate percentages. Just voltage thresholds that protect your battery regardless of what the SOC display says.
The Battery Overnight Estimate also uses voltage and current draw — not SOC — to calculate how long your battery will last.
Can You Fix the EPEVER SOC?
Not really. The SOC algorithm is baked into the controller’s firmware. You can’t calibrate it or change the lookup table.
Some things that might help marginally:
- Make sure you’ve selected the correct battery type in the controller settings
- Perform a full charge cycle (let the battery reach Float mode for at least 2 hours) — this sometimes helps the controller recalibrate
But fundamentally, voltage-based SOC without coulomb counting will always be inaccurate during active use. The best approach is to learn to read voltage directly and treat the SOC percentage as a rough estimate at best.
Get accurate battery monitoring with Helikeep — voltage-based protection that actually works.