LiFePO4 SOC without a BMS link: the inverter was 40–60 points off
One station’s inverter showed 35 % on a nearly full battery. It could not see the BMS, so it guessed the charge from voltage. We stopped trusting that figure. Svitgrid now works out the charge of such a battery itself, and rules, the calendar and alerts run on the right number.
Where the inverter’s figure comes from
The station: an Edecoa EM-624A inverter and two Dyness B4850 batteries, together a 15S LiFePO4 pack of 4.8 kWh. An ED-1 board reads the inverter over RS-232 using the PI30 protocol. There is no BMS cable, and program 05 sets the battery type to USE, which means by voltage.
In that mode the inverter computes the SOC field of its QPIGS reply (field 10) from battery voltage on a straight line: 46.2 V is 0 %, then about 10 % per volt. That is acceptable for lead-acid. It is not for LiFePO4: between 20 % and 90 % the resting voltage stays within 3.25–3.35 V per cell, which is 48.8–50.3 V per pack, and it sags further under discharge current. On the morning of 20 October the inverter showed 34–42 % while the pack LEDs showed 75–100 %.
Rules, calendar events and low-battery alerts run on that figure. An error of 40–60 points makes them useless: a condition at 40 % and below fires on a full battery.
What changed
For these stations Svitgrid no longer takes the SOC from the inverter. It determines the battery’s charge itself, on the server, from data the ED-1 board already sends, and refines it at every full charge. There is nothing to update in the app or the firmware.
Every part of Svitgrid sees the computed SOC: the home screen, the charge chart, rules, calendar events, and alerts. We keep the inverter’s figure for comparison, but the app no longer makes decisions from it.
| Inverter | Svitgrid | |
|---|---|---|
| 20 October, morning (trial run; LEDs 75–100 %) | 34–42 % | 90–98 % |
| 21 October, 16:25, discharging 780 W | 25 % | 51 % |
| Daily error, 19 October | — | +2.2 pts |
| Daily error, 20 October | — | +0.3 pts |
The first cycle
The calculation was switched on at 17:35 on 20 October, mid-day, with no history. Its first value was 9 points above the real charge: on the flat part of the LiFePO4 curve, voltage says little about charge. Overnight the station charged from the grid, at 01:55 the battery was full, and the error was gone. We reconstructed the real charge afterwards from the energy the battery gave in the evening and took overnight.
Every change in the app and the firmware, line by line.
Open the changelog →