⚠ If your BMS reports FC > this value the detector flags SOH > 100% as impossible.
Set to the actual OEM-rated Ah on the pack label (e.g. 105 if pack is 105 Ah).
Attack Simulation Parameters
Rows 0…N treated as clean reference in single-file mode. Increase (e.g. 80–100) if
attack starts late in the file. Decrease only if file is short.
Confirm the clean file returns CLEAN verdict before running any attack — required for client demo
Run this first, before simulating any attack. Validates that the clean
file produces a CLEAN verdict before any attack
is injected. Uses dual-file mode with the same file as both clean and suspect
— zero delta on all layers → unambiguous CLEAN. Always
Auto-Detect Capacity first so L4 does not fire on natural FC variation.
python3 bvl_attack_detector.py --suspect <CLEAN_CSV> --capacity <N> --baseline-rows 80 --scenario all
1
Step 1 — Simulate Attack
Inject IR suppression · SOH inflation · voltage drift into a VChart CSV
Use only when you have no clean reference file — less accurate
python3 bvl_attack_detector.py --suspect <ATTACK_CSV> --model <MODEL> --capacity <N> --scenario all
2B
Step 2B — Dual-File Detection (Recommended)
Clean CSV as reference + attack CSV as suspect — the only reliable way to isolate injected signals
Why dual-file? Single-file mode uses only the first N rows as its own baseline.
For a 570-row pack with natural FC drift, L2 & L4 will flag the clean file itself as suspicious —
a false positive. Dual-file mode uses VChart1081.csv as ground-truth clean and
VChart1081_attack.csv as suspect, giving true signal isolation.