The manual
Read your own battery
Plug an OBD adapter into your EV and see what the battery management system actually reports — cell spread, state of health, powertrain temperatures, and how they move over months. Every figure says where it came from.
Free. No account needed to try it in a browser.
01 EV battery basics
Five ideas. Everything else in this manual rests on them.
Your pack is a stack of cells
An EV battery is not one battery. It is a few hundred small cells wired in a chain, so their voltages add up. A Tata Punch.ev has 102 cells in series — hence "102S" — each sitting around 3.2 volts, which is where the pack's ~326 V comes from.
cell 1 cell 2 cell 3 cell 102
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ 3.21 ├─┤ 3.22 ├─┤ 3.21 ├─ ... ───┤ 3.19 │ = ~327 V pack
└──────┘ └──────┘ └──────┘ └──────┘
▲
the lowest cell
This is the single most important consequence. A chain is as strong as its weakest link. When one cell reaches its lower limit, the battery management system stops the pack — even if the other 101 cells still hold charge. Your range is set by your worst cell, not your average one.
LFP and NMC behave differently
- LFP
- Lithium iron phosphate. Used in the Punch.ev, Nexon EV and BYD Blade packs. Long lived, tolerant of full charging, and — importantly here — its voltage barely changes across the middle of its charge range.
- NMC
- Nickel manganese cobalt. Higher energy density, a voltage that falls more steadily as it discharges, and usually happier kept below 100%.
Which one you have decides what a voltage reading can tell you, which is section 5.
State of charge is not state of health
- State of charge
- How full the pack is right now, as a percentage. Like a fuel gauge. Changes every time you drive or charge.
- State of health
- How much capacity the pack still has compared with when it was new. Like the size of the fuel tank. Falls slowly over years, and never comes back.
A pack at 100% charge and 85% health is completely full — of a tank that is now smaller than it was.
Cells drift apart, and balancing pulls them back
Cells are never identical, and small differences compound over hundreds of cycles. The battery management system corrects this by bleeding charge off the highest cells through small resistors until the others catch up — which is why balancing only happens near the top of a charge, and why it is slow.
It can only take charge away. It cannot move charge into a low cell. A cell that has genuinely lost capacity cannot be balanced back to health.
What OBD can and cannot reach
The diagnostic port gives access to what the car's controllers choose to publish. On these vehicles that includes the pack's voltage and current, its charge and health, the highest and lowest cell voltages and which cell numbers they are, and a set of temperatures.
It does not include every individual cell's voltage — the biggest single limit on what any OBD tool can show you. Section 9 covers what follows from that.
02 Getting the app
You need an adapter
An ELM327 OBD-II adapter — Bluetooth LE for phones and browsers, or Wi-Fi with the Android app. Avoid the cheapest clones; they drop frames and produce readings that look like faults.
Android
The full app, installed on the phone. Works with no signal, connects to Bluetooth natively, and is the only way to use a Wi-Fi OBD adapter — those speak a protocol no browser is permitted to open.
Android 6.0 or newer
iPhone and iPad
Safari does not implement Web Bluetooth, and every iOS browser is Safari underneath — so no iPhone browser can reach an OBD adapter.
The workaround is Bluefy, a free browser on the App Store that
adds it: install Bluefy, open evds.sayuk.cloud inside it, and connect
as normal.
A native iOS build is not available yet.
Installing on Android
- Tap Download the APK above, on the phone itself.
- Open the downloaded file. Android asks whether to allow installing apps from your browser — this appears because the app is not from the Play Store, and the permission can be turned back off afterwards.
- Open Sayuk EVDS, create an account, and connect your adapter.
It asks for Bluetooth, and not for location. Android used to require location permission for any Bluetooth scanning, because scanning can be abused to work out where someone is. This app declares that its scanning is never used for that, so on Android 12 and newer it does not ask.
03 Your first scan
- Put the car in READY. Not accessory, not ignition-only. With the high-voltage contactors open, pack voltage and current read zero and several controllers do not answer at all.
- Connect the adapter from the Cockpit screen. Android shows its own device picker; pick your adapter by name.
- Wait about half a minute. The app reads different parameters on different cycles, so the screen fills in progressively rather than all at once.
- Do nothing else. Logging starts by itself and keeps going while you are connected. There is no record button, and nothing to forget.
Scan the same car from the same account. Trends, cell recurrence and module attribution are computed from your vehicle only. Cell 69 on another car is a different cell, and mixing two vehicles produces a chart that looks meaningful and means nothing.
04 Measured, derived, or estimated
Every figure in the app carries one of three labels, because a number read from the car and a number inferred from it are not the same kind of fact.
Measured
Read straight from a controller: state of charge, pack voltage and current, the highest and lowest cell and which ones they are, temperatures, odometer.
Derived
Arithmetic on measured values, with nothing assumed. Pack power is voltage times current. Cell spread is highest minus lowest.
Modelled
Needs an assumption the car does not report: energy in kWh, efficiency, the per-cell grid. Useful on screen; excluded from exported health reports.
The per-cell grid is modelled. Your car publishes the highest cell, the lowest cell, and which cell numbers they are — not the other hundred. Those three values are real; every position between them is interpolated, and carries no information about the cell it sits on.
05 Why charge level decides what a scan can answer
When you scan decides what the scan can answer. It follows from the chemistry in section 1.
An LFP cell's voltage barely changes between roughly 20% and 80% charge — on the order of 0.7 mV per 1% of charge. The battery management system reports cell voltages rounded to the nearest millivolt.
cell
voltage
3.6 ┤ ╭──
│ ╭───╯
3.4 ┤ ╭───╯
│ ╭────────────────────────────╯
3.2 ┤───╯ ← 0.7 mV per 1% across all of this
│
3.0 ┼───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──
0 10 20 30 40 50 60 70 80 90 100 %
So a 5 mV spread at 50% charge cannot be turned back into an imbalance: the measurement is real, the inference is not available. Above about 95% the curve rises steeply and the same millivolt means far less charge, which is the one region where a spread can be read as imbalance — and the app reports it as such only there.
| Charge level | What a scan here is good for |
|---|---|
| Above 95% | Imbalance, and balancing behaviour. The only band where cell spread means what people think it means. Scan at the end of a full AC charge. |
| 60–95% | Temperatures, health trend, state of health, resistance comparisons. Spread is recorded but not interpreted as imbalance. |
| 20–60% | Everyday session logging, efficiency, temperatures. The flattest part of the curve. |
| Below 20% | Weak cells show themselves. Voltage starts moving again and a sagging cell drops away from the others under load. |
06 What each reading means
| Reading | What it is | What to watch |
|---|---|---|
| Cell spread Measured |
Highest cell minus lowest, in millivolts. | Single digits is ordinary for LFP. Only compare spreads taken at similar charge levels — the app groups them into bands for exactly this reason. |
| σ (sigma) Derived |
How tightly the cells are grouped, estimated from the spread using a standard control-chart constant. | Rising σ across scans at the same charge level is the early signal. A single value in isolation says little. |
| State of health Measured |
The BMS's own estimate of remaining capacity. | It is the car's opinion, not an independent measurement. Trust the trend across months more than any single reading. |
| Balancing Measured |
One bit from the BMS: balancing is happening, or it is not. | That register does not say which cells or how many. Any shunt count shown is an estimate and is labelled as one. |
| Resistance spread Derived |
How differently cells respond between load and rest, within one session. | Better behaved than voltage spread on LFP, because it does not depend on where you sit on the plateau. |
| Powertrain temperatures Measured |
Motor winding, inverter, compressor, busbars, DC-DC, coolant. | Compare them with each other. One sensor far above its neighbours after a hard drive is worth a conversation with a service centre. |
| Efficiency Modelled |
Distance divided by energy, where energy is charge used times the pack's rated capacity. | Your pack no longer holds its rated capacity — that is what state of health measures — so treat it as a comparison between your own trips, not an absolute. |
07 Finding a weak cell
If the car loses range suddenly near the bottom of the charge, or shuts down earlier than the percentage suggests, one cell is usually reaching its floor before the rest.
Start about 5% above where the problem appears. If the car falters at 15%, begin the drive with the app connected at around 20%. It is then already recording when the cell starts to diverge, and captures the whole slide rather than the aftermath. Starting at the symptom means the interesting part has already happened.
- Charge to full at least once first, on AC. That gives balancing a chance to work, and gives you an above-95% reference scan to compare against.
- Drive normally down to about 5% above the level where you see the problem.
- Connect the adapter and leave the app open. Logging starts on its own.
- Drive through the trouble zone as you normally would. Do not baby it — a weak cell shows itself under load, not when coasting.
- Look at Health → cell recurrence. One scan proves nothing. The question is whether the same cell number keeps appearing as the lowest.
On a 102-cell pack, any given cell should be the lowest about 1% of the time by chance. A cell that is lowest in a fifth of your scans is not chance, and the recurrence chart marks that threshold so you are not eyeballing it.
08 The statistics, briefly
Two numbers in the app are not obvious, and both exist because a single scan cannot answer the question you are actually asking.
Sigma, from a spread
You want to know how tightly the cells are grouped, but the car only gives you the
highest and the lowest. There is a standard relationship between the range of a sample
and its spread — the control-chart constant d₂ — and with 102 cells
d₂ ≈ 5.03. So a 5 mV range implies roughly 1 mV of scatter.
It is an estimate from two numbers, which is why it is labelled derived rather than measured, and why its trend matters more than any single value.
Recurrence, against chance
Any cell can be the lowest once. What matters is whether the same one keeps coming back. With 102 cells, chance alone puts each at about 1%, so the chart draws that line and lets you see which cells sit above it.
This is also why the app insists on scans from one owner and one vehicle: pooling two cars makes cell numbers meaningless, and the chart would still look convincing.
09 What it cannot tell you
Four things these vehicles do not make available over OBD.
- Individual cell voltages
- The car does not publish them. Reaching them needs a physical tap on the high-voltage harness, which is not something to do casually.
- Regenerated vs used energy
- Separating them needs current recorded continuously through a drive. Session logging now records that, so this becomes available once there are drives to read.
- Where the power goes
- Motor versus climate versus everything else. The car reports one number for pack power, and nothing in it separates the loads.
- Motor torque
- The value is read, but its scale is undocumented, so it is shown raw and nothing is derived from it.
A diagnostic aid, not a verdict. A reading that worries you is a reason to talk to a qualified service centre, with the exported report in hand — not a reason to act on your own.
Community
Join the WhatsApp group
Where the technical discussion happens: readings people cannot explain, what the numbers mean on different vehicles, and what to try next. If you are chasing a cell, this is the fastest way to find someone who has already chased one.
Troubleshooting
| Symptom | Try this |
|---|---|
| Adapter not listed | Turn Bluetooth off and on, and make sure the adapter is not still paired to another phone. |
| Connects, no data | Put the car in READY. In accessory mode the high-voltage side is disconnected and reads zero. |
| Values appear slowly | Expected. Parameters are read on different cycles; powertrain temperatures refresh roughly every 15 seconds. |
| Wi-Fi adapter unreachable | Join the adapter's Wi-Fi network in Android settings first. Ignore the "no internet" warning — that is expected, and the app handles it. |
| Install blocked | Allow your browser to install unknown apps when prompted, then open the downloaded file again. |
| A reading looks impossible | Take another scan. A single odd frame is usually a dropped packet; a value that repeats is worth asking about in the community. |