Manual / Features
Efficiency & real range
How much the car really uses, and how far that actually reaches — measured from your own charging history rather than taken from the car’s own estimate. No REST quota: every figure comes from records the stream already produced.
How it’s measured#
Every charging session stores the odometer and the state of charge at the moment it ended. Two sessions therefore bracket a window in which both the distance driven and the energy that went in are known:
used = energy delivered between the two readings
− the charge still sitting in the battery at the end
distance = odometer at the end − odometer at the start
That deliberately reads nothing from your trips. Trip detection can miss a drive — a dead stream, an upgrade, a garage with no signal — and dividing a full month of charging by a partial month of driving produces a wildly inflated figure. On a real car, one such month read 86.8 kWh/100 km off the trip distance and 20.4 off the odometer.
The window it uses#
A window needs two charges and at least ~50 km between them, so a fixed “last 30 days” would go blank for anyone who charges rarely, and “all time” would still be quoting last winter in June. So the shortest window that can answer wins: 30 days, then 90, then a year, then the whole ledger. The card and the sensor always say which one the number came from — last 30 days means something different from all records.
Which side of the charger#
- Battery-side (
from the battery) — what the car took out of the pack. This is the figure comparable with the car’s own display, and the only one range may be computed from. - Grid-side (
at the plug) — what came out of the wall, including charging losses. Available only when every charge in the window was actually measured at the grid (BMW’s own charging history, or a wallbox energy entity you bound).
A figure is never a mix of the two. If one charge in a window can only be read on one side, that side simply reports nothing rather than summing a hole.
Real range#
range on a full battery = usable capacity ÷ consumption × 100
range from here = that, scaled by the current state of charge
The capacity is BMW’s own usable-energy figure (maxEnergy), replaced by the
one battery health learned as soon as that estimate
becomes confident — the sensor says which it used.
Both halves must be present. If the car never reported a capacity, or the ledger can’t yet support a consumption figure, the sensor stays unknown rather than showing a range built on an assumption.
Compared with the car’s own estimate#
The card shows the difference against BMW’s remaining-range prediction
(kombiRemainingElectricRange — the number in the instrument cluster). Positive
means your measured consumption reaches further than the car promises.
BMW’s figure is scaled up to a full battery only above 20 % charge: below that, dividing a small remaining range by a small percentage multiplies its own error with it.
The Real Range sensor#
One Real Range sensor per EV:
- State — how far it goes from the current charge, in km.
- Attributes — range on a full battery, the measured consumption with its side and window, the grid-side figure and the measured charging loss, the capacity and where it came from, BMW’s own prediction and the percentage difference.
It is created for an EV that streams an odometer — not for a
plug-in hybrid. Until the ledger can support a figure it
reads unknown, and the status attribute says which half is missing:
not_enough_history or no_capacity.
Note on the charging loss shown here. It is measured — grid-side consumption against battery-side consumption over the same window — and is a different thing from the charging loss % setting under Charging costs & history, which is an assumption you supply so cost can be grossed up when nothing measured the grid. If you have both, the measured figure is a good sanity check on the number you typed.
Plug-in hybrids#
A plug-in hybrid gets no consumption figure and no real range — and no
Charging Cost per 100 km
either. The odometer counts every kilometer, including the ones the engine
drove, and nothing the car streams says how many those were. Dividing the
charged energy by all of them reads low by exactly the share driven on fuel: a
car driven half on fuel would show half its real consumption, and a real range
twice what the battery reaches — say 186 km from a 19.7 kWh pack that really
manages about 90. So the figures are withheld rather than shown wrong. The
efficiency view says so, and get_efficiency returns status: plug_in_hybrid.
What still works on a hybrid: battery health, the charging history with its energy and cost, and each trip’s energy. A car is treated as a hybrid once it has streamed both high-voltage battery data and fuel data. A hybrid that got a Real Range or Charging Cost per 100 km sensor from an earlier version has it removed at the next restart.
Viewing it#
Use the view: efficiency card:
the real range from here, the measured consumption, the charging loss, the
capacity, your cost per 100 km with the month’s solar share, and a bar chart of
consumption by month — which is where the seasonal story shows up, since winter
consumption on an EV is routinely a third higher than summer.
Or call bavariandata.get_efficiency
for the whole profile including the month trend.
Why the numbers may differ from the car#
- The car’s display averages differently. BMW’s own consumption readout resets and weights on its own terms; this one is a straight energy-over- distance sum across whole charging cycles.
- Grid-side reads higher than battery-side by the charging losses — a slow AC charge in the cold can lose 10–15 %.
- Short, cold trips cost more than the average. The figure describes the whole window, so a month of nothing but 5 km hops in January will read far above a summer average. That is the number being right, not wrong.