Battery Health & Degradation
Understand how lithium-ion batteries age, what affects their lifespan, and how to monitor your Zero's battery health through log data.
TL;DR
Li-ion batteries degrade through both calendar aging and cycle aging. The main factors are temperature (avoid extremes), storage SOC (50-70% ideal), and charge cycles. Zero's street and FX packs are 28 cells in series. We deliberately do not publish a cycles-to-80% number: nothing in Zero's manuals states one, and the figures that circulate for these packs are unsourced. Given a real capacity figure, this site raises an attention finding below 70% of nameplate and a critical one below 50%. Watch the cell spread (B) trend in your logs, and read the measured-capacity section below.
How lithium-ion batteries degrade
Battery degradation is an inevitable process where the battery's ability to store energy decreases over time. This happens through several mechanisms at the molecular level.
Calendar aging
Degradation that occurs simply over time, even without use:
- • SEI (Solid Electrolyte Interphase) layer growth
- • Electrolyte decomposition
- • ~2% capacity loss per year at optimal conditions
- • Accelerated at high temperatures or high SOC
Cycle aging
Degradation from charging and discharging:
- • Lithium inventory loss during cycling
- • Electrode structure breakdown
- • ~0.02% loss per cycle for a typical automotive Li-ion cell
- • Higher C-rates accelerate degradation
Temperature effects
Temperature dramatically affects degradation rate:
- • Optimal: 15-30°C (59-86°F)
- • >35°C doubles degradation rate
- • Cold charging (<0°C) causes lithium plating
- • Hot storage accelerates calendar aging
SOC effects
State of Charge impacts battery stress:
- • High SOC (>90%) increases calendar aging
- • Very low SOC (<10%) can damage cells
- • Ideal storage: 50-70% SOC
- • Full charges help cell balancing
Zero battery specifications
Every Zero street and FX-family pack is 28 cells in series, from the 2012 ZF6 to the 2026 DSR/X, at roughly 102 V nominal. (The 2026 LS1 / XE / XB light line is the exception, at 74 V.) The manuals never name a cathode chemistry or a cell supplier, so neither do we.
For a health page only two capacity numbers matter, and confusing them is the single easiest way to compute a wrong state of health:
Badge / nominal max
The number in the name, such as the 14.4 in ZF14.4. This is the pack maximum, and it is the denominator this site divides by when it prints a state-of-health percentage.
Usable / published nominal
The energy Zero says you get, quoted on the owner-manual spec sheet as “nominal”. It runs 87.2% to 89.3% of the badge across every pack in the catalogue, and never more.
Your pack, in three numbers
Only one of them is wear. Drag the health and watch which part moves.
- What you can ride on today4.58 kWh
- Lost to age: this is the degradation1.14 kWh
- Never yours: the badge counts the same charge at peak cell voltage, from day one0.78 kWh
At 80% health this pack reads 70% of its badge. That is the frightening number, and the wrong one to judge by. Against what it gave when new, it is 80%. That is an ordinary pack doing its job.
Every Zero pack, badge against usable
| Pack | Badge (max) | Usable | Usable ÷ badge | Years |
|---|---|---|---|---|
| Modular: FX family, one or two removable bricks | ||||
| ZF2.8 | 2.8 kWh | 2.5 kWh | 89.3% | 2013-2015 |
| ZF3.3 | 3.3 kWh | 2.9 kWh | 87.9% | 2016-2017 |
| ZF3.6 | 3.6 kWh | 3.2 kWh | 88.9% | 2019-2023 |
| ZF5.7 | 5.7 kWh | 5.0 kWh | 87.7% | 2013-2015 |
| ZF6.5 | 6.5 kWh | 5.7 kWh | 87.7% | 2016-2018 |
| ZF6.5 (integrated) | 6.5 kWh | 5.7 kWh | 87.7% | 2016-2018 |
| ZF7.2 | 7.2 kWh | 6.3 kWh | 87.5% | 2018-2023 |
| ZF7.2 (integrated) | 7.2 kWh | 6.3 kWh | 87.5% | 2022-2025 (FXE) |
| Monolith: one bonded pack, not user-swappable | ||||
| ZF6 | 6.0 kWh | 5.3 kWh | 88.3% | 2012 |
| ZF8.5 | 8.5 kWh | 7.5 kWh | 88.2% | 2013-2014 |
| ZF9 | 9.0 kWh | 7.9 kWh | 87.8% | 2012 |
| ZF9.4 | 9.4 kWh | 8.3 kWh | 88.3% | 2015 |
| ZF9.8 | 9.8 kWh | 8.6 kWh | 87.8% | 2016 |
| ZF11.4 | 11.4 kWh | 10.0 kWh | 87.7% | 2013-2014 |
| ZF12.5 | 12.5 kWh | 11.0 kWh | 88.0% | 2015 |
| ZF13.0 | 13.0 kWh | 11.4 kWh | 87.7% | 2016-2017 |
| ZF14.4 | 14.4 kWh | 12.6 kWh | 87.5% | 2018-2021 |
| ZF15.6 | 15.6 kWh | 13.6 kWh | 87.2% | 2022-2025 |
| ZF17.3 | 17.3 kWh | 15.1 kWh | 87.3% | 2022-2026 |
| Supplemental: additive; never renames the main pack | ||||
| Power Tank 2.8 | +2.8 kWh | +2.5 kWh | 89.3% | 2014-2017 |
| Power Tank ZF3.6 | +3.6 kWh | +3.2 kWh | 88.9% | 2018-2025 |
| Power Pack Module | +3.6 kWh | +3.2 kWh | 88.9% | 2013-2023 |
Which model carries which pack, and how a badge that covers two different physical constructions gives itself away in your log filenames, is on Battery Fundamentals; full detail on each pack is in the battery catalogue. One footnote: the figures above are the ones Zero prints from model year 2024 on. The MY2022-2023 manuals quoted the ZF15.6 as 13.7 kWh and the ZF17.3 as 15.2 (0.1 kWh higher in each case), so an older manual will disagree by that much.
Do not apply it to a measured reading. When a Gen3 pack reports its own full-charge capacity (next section), that number is already at badge scale: it reads at or near 100% of nameplate on a healthy bike. Discounting it by a further 0.88 before dividing would manufacture roughly 14 points of state of health out of nothing.
How we put a kWh number on your pack: two of them, never blended
There are two entirely different ways to say how much energy a used pack still holds, and this site computes both and shows them side by side. They share no inputs, so where they agree you can believe them, and where they disagree the gap is itself the finding.
Measured: read out of the pack
Every Gen3 BMS log carries 78-byte health records, and one field in them is the pack's own full-charge capacity in ampere-hours, stored twice a few bytes apart. We take the median across a file after discarding flash sentinels, requiring the two copies to agree within 2% and requiring a plausible 50-250 Ah.
Nothing here comes from a charging session: there is no SOC arithmetic and no energy total, so a charge we merely inferred from an SOC gap cannot contaminate it.
Availability: Gen3 BMS logs only, 7 files across 5 bikes in the corpus behind this site. Every other file in it produces no reading at all rather than a wrong one.
Estimated: inferred from your charges
For every charge we know the energy that went in and the SOC it bought, so energy ÷ (SOC gained ÷ 100) is an estimate of the whole pack. We take the median over the good charges (big SOC swings, sane power) rather than the mean, so one odd session cannot dominate.
Charges we recovered from SOC gaps rather than measured are excluded by rule: their energy was itself derived from an assumed pack size, so including them would be circular.
Availability: any generation, given enough real charges. It measures the usable window, so it should land near 0.88 of the measured figure, and the signal is how far it deviates from that, not the ratio itself.
Ampere-hours to kilowatt-hours: the constant that decides the answer
The register is in ampere-hours and every published Zero figure is in kilowatt-hours, so a pack voltage has to be chosen, and getting it wrong by 12% moves state of health by 12%. We use 115.6 V, which three independent measurements converge on:
- • Series count. Divide logged pack voltage by lowest cell voltage on every Gen3 BMS file and the answer is 28.02. The packs are 28S.
- • Top of charge. The highest cell voltage anywhere in the Gen3 corpus is 4128 mV, at 95% SOC. 28 × 4.128 V = 115.6 V, and that is a floor, because the pack was not yet full.
- • Nameplate ÷ register on the one bike whose nameplate every source agrees on and whose register has not moved: 14,400 Wh ÷ 124.5 Ah = 115.64 V.
The obvious wrong choice is the resting mid-SOC voltage, ~102 V, which is all most log files ever show. It understates capacity by about 12%. Because the constant matters that much, the API echoes it back in every response instead of hiding it, so the arithmetic can be redone by hand.
Why we call it capacity-against-badge and not remaining life
Here is every bike in our corpus whose nameplate resolves cleanly, with its own register reading:
| Bike | Badge | Register reads | At 115.6 V | % of badge |
|---|---|---|---|---|
| 2020 SR/F (oldest) | 14.4 kWh | 127.4 Ah | 14.73 kWh | 102.3% |
| 2021 SR/F | 14.4 kWh | 124.5 Ah | 14.39 kWh | 100.0% |
| 2024 DSR/X (newest) | 17.3 kWh | 144.7 Ah | 16.72 kWh | 96.7% |
Three things are wrong with reading that column as remaining life:
- • Ranked by age, the order is exactly backwards. The oldest bike reads highest and the newest reads lowest, a rank correlation of −1 on three bikes. Real degradation would run the other way.
- • Two of the three sit at or above 100% of their badge. Nothing degrades upward. Those readings are telling us about nameplate rounding and cell-lot variance, not about wear.
- • Two identical packs disagree with each other by 2.33%. The 2020 and 2021 SR/F are the same ZF14.4 one model year apart, and their registers differ by more than either differs from its own badge. That difference is the floor of what this method can resolve.
So the figure is published as capacity against nameplate, ±3 percentage points (a band measured from that scatter), and it is never labelled state of health remaining. A pack reading three points below its badge has told you nothing. A pack reading fifteen points below it has. The stability of the register is what makes the trend the useful part: the two bikes in our corpus with more than one log file read byte-identical across them, one pair a day apart and the other about three months apart, so movement means a relearn or a pack swap rather than measurement noise.
Capacity is one axis, and on its own it is a poor summary
“How healthy is my battery” has more than one number behind it. Usable capacity is the headline because it is the one you feel (it is your range), but a pack can hold plenty of energy and still be in trouble, and it can lose a little and be perfectly sound. These are the axes worth reading together.
Usable capacity
How much energy comes back out. Falls slowly and fairly predictably with age and throughput. This is what the ladder above is about, and what a charge measures.
Cell balance, in millivolts
The spread between the highest and lowest cell in the string. A pack is a chain: the weakest cell hits the ceiling first on charge and the floor first on discharge, so it decides when everything else has to stop, however much the other twenty-seven are still holding.
Internal resistance
How hard the pack finds it to deliver current. Shows up as sag under acceleration and as heat, and it rises with age and with cold, which is part of why a winter ride costs more than the thermometer alone suggests.
How it behaves with temperature
A cold pack delivers less energy, and it comes back when the pack warms. A pack that runs hot when nothing is asking much of it, or one whose modules disagree about temperature, is saying something a capacity figure cannot.
Cell balance is easiest to understand by looking at it. Both packs below hold almost the same energy, and only one of them is fine. Switch between them:
This is why a single percentage is a poor summary, and why this site prints the capacity figure beside its provenance rather than as a score out of a hundred. If your logs carry the highest and lowest cell voltages, the cell-imbalance trend on your battery page plots the same spread shown above, over time.
Measuring it yourself, at the wall
You do not need us to do this. A cheap energy-metering plug between the socket and the charger will tell you what a charge cost, and if you note the state of charge at both ends you have measured your own pack. There is one trap in it.
A plug meter reads the wall, not the battery
Everything the meter counts has still to get through the onboard charger, which gives up something as heat, and past the BMS and the cooling fans, which are awake and drawing for the whole charge. Somewhere between 85% and 92% of what you paid for arrives in the cells. Divide by the state of charge without allowing for that and you will credit your pack with energy it never received.
A worked example, from a real 2016 FXS with a 6.5 kWh badge. The meter read 2.944 kWh for a charge that took the bike from 40% to 96%, 56 points of charge:
| If the charger is | Into the cells | Full pack works out at | Against 5.7 usable |
|---|---|---|---|
| 85% efficient | 2.50 kWh | 4.47 kWh | 78% |
| 88% efficient | 2.59 kWh | 4.63 kWh | 81% |
| 90% efficient | 2.65 kWh | 4.73 kWh | 83% |
| 92% efficient | 2.71 kWh | 4.84 kWh | 85% |
So that pack holds somewhere around 4.5 to 4.8 kWh usable today. Read against the 5.7 kWh it would have given when new, that is roughly 80% of its original usable energy after ten years, which is an ordinary result and not a fault.
Read against the 6.5 on the badge it would look like 71%, and that is the number that frightens people. It should not: the step from 6.5 to 5.7 was true on the day the bike left the factory and is not degradation at all. Only the step from 5.7 to 4.5 is.
The method has two limits. The last few per cent of a charge run at constant voltage with the current tapering, so the energy per point of charge is not quite the same up there as it is in the middle; keep the window away from both ends where you can. And extrapolating from 56 points to a full 100 assumes the state of charge tracks energy linearly, which it does in the middle and does less well at the extremes. Both are errors of a few per cent, not of a third.
When we refuse to print a percentage at all
A percentage needs a denominator, and four sources can supply one: your own declared pack, the bike record, the VIN decode and the model spec table. If they disagree by more than 2% we do not pick a winner: we show the capacity in Ah and kWh and say why there is no percentage. Two of the five bikes in our corpus land there:
2023 SR/F: sources disagree
The VIN decodes to 15.6 kWh, our model spec table says 14.4, and the owner manual for that year says 17.3. The largest is 20% bigger than the smallest. Picking one would decide the answer as much as the pack does, so we pick none of them.
2021 SR/S: the answer is impossible
Every source agrees on 14.4 kWh and the register reads 16.57, which is 115% of it. Either the decode is wrong or there is an undeclared Power Tank on the bike. A pack cannot be at 115% health, so no percentage is printed.
Both are fixed the same way: declare your actual pack in the component configurator. An owner-declared capacity is a human statement rather than a guess, so it wins outright over all four automatic sources and short-circuits the agreement check.
Why a used pack can read above 100%, and what we found when we checked
A used pack cannot hold more than it did new, so a figure above 100% is a statement about the measurement, not the battery. In October 2026 nine bikes in our fleet showed one, all of them 2014–2019 Gen2 machines. Since version 3.39.2 no percentage above 100% is published on any platform: the measured kWh still is, with the words “measurement not reliable” where the percentage would be. Withholding the figure does not fix its cause, so we went looking for the cause bike by bike.
| What we found | Bikes | With the right pack |
|---|---|---|
| Capacity on file lower than the VIN decodes to (9.4 kWh on file, 12.5 by VIN) | 1 | 75% |
| A Power Tank logged as a second pack but not counted in the capacity (two DSRs, 2017 and 2018) | 2 | 85% and 92% |
| A replacement pack of the 2019 generation in a 2014 DS still on file with its original 11.4 kWh | 1 | about 80%, if the new pack is a ZF14.4 |
| Just above Zero’s nominal (100.1–102%): a healthy pack can exceed the nominal figure a little | 3 | within measurement error |
| Two 2016 packs, original by their serials, measuring about 110% | 2 | not explained yet |
The first three are the same problem: the capacity we divide by describes a pack that is not the one in the bike. The logs already carry the evidence. Every pack writes a serial that starts with two digits and two letters. Up to 2018 the digits match the bike’s model year, and every pack we have seen on a 2019-or-later bike starts with 19, so a serial newer than the motorcycle points to a replacement. The letters group packs into families (observed in our logs, not published by Zero): QD and TB on the S/DS/SR/DSR monolith packs, SG, GB and LB on the FX modules, and SG again on the second pack those two DSRs log, which is the Power Tank.
Newer bikes add one more cause. From 2022 Zero sells the SR, SR/F and SR/S with a “14.4+” or “15.6+” pack that is physically larger, and unlocks up to 17.3 kWh as a paid Cypher Store upgrade. An unlocked pack measured against 14.4 reads high. None of the nine bikes above could have it, since they are all older, but two 2022 Gen3 bikes measure more than their badge allows, which is what an unlocked pack would look like; there are too few charges behind either to say so.
One rule we tried and withdrew belongs here too, because it is the same problem seen from the other side. A bike’s main board measures the whole pack, each BMS file one module. Version 3.39.2 took state of health from the BMS’s charges alone; on a 2016 FXS with a Power Tank, whose BMS reads 1.95 kWh per 100 points against 3.24 from its main board, that made the same pack read 51% on its dashboard and 60% on its battery page. 3.39.5 withdrew it: choosing a meter needs to know which pack, and how many modules, each log is describing. Why the two logs disagree.
Two batteries, two eras: how a pack change is recognised and dated
The My Batteries page now reads that evidence for you and asks. It proposes three things, each with the reason in one sentence: a pack whose serial is newer than the bike (a replacement), a second pack of the module family beside a monolith pack (a Power Tank), and a 2022-or-later SR, SR/F or SR/S whose battery reports more than its badge at full charge (an unlocked capacity). The choices offered are Zero’s own catalogue packs that fit that model in that year, with the most likely one selected (for a 2019-generation pack in a 2014 DS that is the ZF14.4, not simply the largest). Nothing changes until you confirm. A guessed capacity would be a confident wrong denominator, which is the problem this section started with. Dismiss a suggestion and it is not offered again.
Recognising the new pack is half of it. The other half is when it went in, because everything measured before that day belongs to a different battery. The logs cannot give the day itself, because a pack is only seen when someone downloads a log, but they give a bracket: the last day the old pack appears and the first day the new one does. On the 2014 DS in the table that bracket runs from May 2020 to October 2025, and the page says so in those words rather than inventing a date. You can set the exact day when confirming; the first sighting of the new pack is the default. History is then cut there, and each side is measured against its own pack: the old one against the factory capacity its VIN describes, the new one against the pack you confirmed. Each battery card says which capacity its figure is divided by and when that pack was fitted, so the two eras never borrow each other’s numbers.
- A pack in between that nobody named gets no percentage. A bike with three packs in its history and only the latest one confirmed has no reliable capacity to divide the middle one by, so its measured kWh is shown and the percentage is withheld.
- A replacement whose predecessor no log ever showed still splits the history. If the only pack your logs have ever named carries a serial newer than the bike, the factory pack was there before it and simply never appeared in a download; everything before the new pack’s first sighting is measured as the old battery’s, not averaged into the new one’s. On a 2015 DS that kept 52 charges from 2017 out of the figure for a pack first seen in 2022.
- A pack’s own figure starts where its era starts, not on the day a log first happened to read its serial. A log names a pack only when it reads the serial, which can be after its first charges; those charges belong to it all the same, so the pack card and the battery page now count the same ones.
- An FX with no pack size on file gets no percentage. The FX, FXS and FXP were sold with one Power Pack or two, and the VIN cannot say which. Different screens used to guess differently (one bike read 98% on one page and 70% on another), so now every screen shows the measured kWh and says the pack size is not known until you declare it.
- A Power Tank is counted on top of the main pack, never as one of its modules. The figure is shown for the whole battery: a 13.0 kWh pack plus a 2.8 kWh tank is 15.8 kWh, not two “modules” of 7.9 that no label carries.
- An unlocked capacity is the same catalogue pack (15.6 or 17.3 kWh) marked as unlocked, not a separate battery: the cells did not change, the usable window did.
- Only your own logs count. If another account has uploaded logs of the same motorcycle (a previous owner, say), their charges never enter your figures. Your own downloads still carry the battery’s history from before you bought it, because a Zero log keeps what came before. Buying the bike does not restart the figure: the battery did not change hands with a fresh start.
- On a valuation card, a capacity you confirmed from the logs’ own evidence is not treated like one typed by hand, because the evidence travels with it. A figure above 100% is still withheld whatever its source.
A pack the logs cannot recognise (a replacement whose log carries no pack serial, or a tank from another maker) can still be declared by hand in the component configurator, and the percentage comes back on the right denominator.
When there are not enough measurements yet
A percentage also depends on how many times we have measured your pack, and below four charges the answer is noise. Across our whole fleet, of the sixteen bikes that once reported an impossible figure (over 100% health), thirteen had three measurements or fewer behind them. The same motorcycle, on that little evidence, has read anywhere from 51% to 113%.
So the page now shows a count instead of a percentage until four charges have counted: “2 of 4”, filling as they arrive. That count is a statement about our evidence rather than a low score for your battery, and an unmeasured pack is not a damaged one.
What makes a charge count
It has to lift the pack at least 15 points of how full it is, and the log has to record the energy that went in. A charge from about 60% to full is worth roughly twice a top-up from 80%: how full the pack is gets stored as a whole percent, so the bigger the lift, the less that rounding matters. Under 15 points we discard it entirely: across the fleet that is 1,256 charges, and 364 of them missed by five points or fewer.
Rides are shown on the capacity chart but do not count toward the four. On the bikes that log both, a ride implies about 83% of what the same pack’s charges imply, because the state-of-charge drop it divides by is inflated by voltage sag and regen. Two errors partly cancelling is not a measurement.
This matters most on Gen3 bikes, which log far fewer usable charges than Gen2: a median of two against eight. It is why a 2023 SR/F can show a full page of telemetry and still say it is measuring.
Degradation simulator
Use the sliders below to model how different factors affect battery degradation over time. This is a simplified educational model based on general Li-ion research.
Battery Pack Size
Battery Age
Total Charge Cycles
Average Storage SOC
Optimal: 50-70%. Avoid storing at 100% or below 20%.
Average Operating Temperature
Optimal: 15-30°C. High heat accelerates degradation significantly.
10-Year Capacity Projection
Visualizing cell degradation
Watch how individual cells in a battery pack degrade over time. Notice how cell capacities diverge as the pack ages, leading to increased imbalance.
Battery Degradation Animation
- • SEI layer growth on electrodes
- • Lithium inventory loss
- • Cell-to-cell capacity divergence
Signs of degradation in your logs
| Indicator | Healthy | Warning | What it means |
|---|---|---|---|
| B (cell spread, H − L) | ≤ 40 mV excellent 41-80 mV normal | 81-120 mV moderate > 120 mV significant | Cell capacity divergence. These are the bands our diagnosis engine fires on, applied to the report-level average; a single high reading under load or at low SOC is normal |
| Voltage Sag | <8V under load | >12V under load | Increased internal resistance |
| SOC Accuracy | Consistent | Jumps/Inconsistent | BMS calibration drift |
| Charge Time | As expected | Significantly shorter | Reduced usable capacity |
| Range per Charge | Stable | Noticeably reduced | Lower total energy storage |
For scale on the first row: across 10,555 real BMS discharge rows from four log files in our corpus, the median cell spread is 5 mV, 98.4% of rows sit at or under 40 mV, and only 0.2% exceed 120 mV. A pack in the 41-80 mV band is unremarkable, which is why nothing is raised there. The previous version of this table called 60 mV a warning while the product called the same reading normal.
How to maximize battery life
Daily use tips
• Charge to 80-90% for daily commuting
• Avoid depleting below 20% regularly
• Let the bike cool after hard riding before charging
• Use Eco mode when you don't need full power
• Full charge monthly to allow balancing
Storage tips
• Store at 50-70% SOC for extended periods
• Keep in cool, dry location (15-25°C ideal)
• Avoid storing at 100% or below 20%
• Check and top-up monthly during storage
• Avoid direct sunlight on parked bike
Charging tips
• Avoid charging in extreme temperatures
• Don't leave plugged in at 100% for days
• A slower charge is gentler; use the wall socket when you are not in a hurry
• Occasional full charges help cell balancing
• Unplug when charge completes
Avoid
• Charging at the pack's maximum rate every single time
• Charging below 0°C (32°F)
• Leaving at 100% for weeks
• Running to 0% repeatedly
• High-power riding followed by immediate charging
Module-level diagnostics
As of May 2026 the parser captures per-module data from MBB Contactor events on Gen2 packs. Multi-brick configurations (e.g. FXS, dual-Long-Brick) now expose individual module voltages and balance metrics, which makes a single weak brick visible long before the BMS pack-level signals do.
Per-module voltage imbalance
Each module reports its own pack voltage on every contactor event. Thevoltage_difference_voltsfield records the spread across modules:
- • <0.05 V: healthy parallel pack
- • 0.05-0.20 V: early divergence, watch the trend
- • > 0.20 V: one brick is degrading or has an open cell
Precharge health
Before the main contactor closes, a precharge resistor brings the capacitor up. A healthy bike reachesprecharge_percent ≥ 85%in under a second:
- • 85–95%: normal
- • 70–85%: degraded precharge resistor or contactor wear
- • <70%: failure imminent, replace soon
Open-circuit cell voltage (OCV)
Cell voltage measured with no load (voltage_unloaded_cell_volts) is the truest indicator of state-of-charge, because load voltage sags under discharge and overshoots during charge.
- • OCV vs loaded voltage gap quantifies internal resistance
- • Growing gap over time = aging cells
- • Now extracted for Gen2 BMS too (was Gen3-only before May 2026)
Module identity tracking
Each module logs its ownserial_number. Useful for:
- • Detecting a module swap (warranty replacement)
- • Tracking a specific brick's health over multiple log uploads
- • Confirming all bricks in a multi-pack config are present
These diagnostics live in thelog_entries.raw_dataJSON column. Your dashboard's battery-health views surface them, and the API exposes them. Look for them on Gen2 logs (FXS, S, SR, DS, DSR, FX with multi-brick packs); single-brick configs only emit one set of values per contactor event.
Sources:
Battery degradation information is based on general Li-ion research and may vary for specific Zero models. For warranty information and official battery specifications, consult your Zero Owner's Manual.