Skip to main content
Back to Learn Hub
Log File Structure

How Zero Logs Work

Understand the structure of MBB and BMS log files, how they're generated, and what data they contain.

Last updated: July 30, 2026

TL;DR

Zero stores diagnostic data in binary .bin files: MBB logs contain riding data (motor, controller, speeds), while BMS logs track battery state (cell voltages, SOC, charging). Both include timestamped entries that this tool parses into human-readable format.

Log Format by Generation

“Gen2” and “Gen3” here mean log formats — which binary layout the file uses — not the motorcycle's product generation. The two do not line up model for model, and the generation comparison untangles the three senses of the word.

Full Support: Gen2 format

The 262,144-byte MBB\0 / BMS\0 dumps: FX (2014-2025), FXS (2016-2021), FXE (2022-2025) and the SDS-platform S, SR, DS and DSR (2014-2023), plus the FXP, XU and MX variants. Sevcon Gen4 controller, full MBB/BMS parsing. The FXE routes down the Gen3 path in our parser while remaining a Cypher II motorcycle — both statements are true, and neither describes the other. We have no log from a 2024+ S, SR, DS or DSR (those are Cypher III machines), so which format they write is unverified here.

Full Support: Gen3 format

The native 0xB2 ring buffer: SR/F and SR/S from 2020, DSR/X from 2023 — MBB & BMS fully decoded. Ride/charge sessions, cell voltages, temperatures, state machine all parsed. Note: Gen3 uses a ring buffer that a parked bike fills in about 3 days — the MBB wakes once an hour and writes ~31 entries each time. Download logs frequently to capture ride history.

Two Types of Logs

Zero Motorcycles have two independent logging systems, each tracking different aspects of the bike's operation:

MBB Logs

Main Bike Board — The central controller that manages motor operation, display, and system coordination.

Contains (Gen1 / Gen2):
  • • Motor temperature & RPM
  • • Controller temperature
  • • Odometer
  • • Battery and motor amps
  • • Pack voltage, SOC and the module bitmask
  • • Ambient temperature
  • • System events & errors

No road speed. No Zero log of any generation contains a speed field — where you see km/h it was computed from motor RPM using a per-model constant. Throttle position is never logged either.

On the Gen3 FST bikes (SR/F, SR/S, DSR/X) the MBB record carries none of the motor channels: no road speed, no RPM and no odometer. Bike state and the power limits live there instead, and the BMS becomes the source for the electrical channels.

Filename patterns (all real):
VIN_MBB_YYYY-MM-DD.bin
VIN_MbbD_YYYY-MM-DD.bin
YYYYMMDD_HH.MM_VIN_MBB.bin
YYYYMMDD_HH.MM_VIN_6.bin

There is no digit after MBB. A bike has one main board, so the MBB file carries no index — across a 352-file corpus these are the forms that occur, give or take a download that arrives with dashes instead of underscores or a _1 copy suffix. MbbD is the dealer-tool export of the same board; the two date-first forms are what the Gen3 FST bikes emit, where _6 is the MBB and _10 the BMS.

BMS Logs

Battery Management System — Dedicated controller for battery monitoring, protection, and charging management.

Contains:
  • • Cell voltages (L, l, H)
  • • State of Charge (SOC)
  • • Pack voltage
  • • Cell balance delta
  • • Pack & board temperature
  • • Charging events
Filename patterns (all real):
VIN_BMS0_YYYY-MM-DD.bin
VIN_BMS1_YYYY-MM-DD.bin
VIN_BmsD0_YYYY-MM-DD.bin
YYYYMMDD_HH.MM_VIN_10.bin

The digit is the battery module index — and it is the reason there can be more than one BMS file. Details below.

If your bike has two battery modules, it writes two BMS files — and half your pack is missing if you only upload one

Each battery module runs its own BMS and keeps its own log, so the index in the filename counts modules, not files. In our 352-file corpus the split is BMS0 ×109, BMS1 ×78 and BmsD0 ×17. One 2016 FXS with the two-module ZF6.5 pack emits BMS0 ×61 and BMS1 ×61 — same days, different files. An FXE with the integrated ZF7.2 emits BMS0 only.

The MBB log agrees, which is how you can check it without counting files. On the two-module FXS the MBB logs Module 00 Registered and Module 01 Registered, and every riding entry carries a module bitmask reading mods 11. On the FXE only Module 00 ever registers and the bitmask reads mods 10 — one module present. That single character is the difference between a pack built from two removable bricks and one integrated pack wearing the same kWh badge.

One caveat on counting. The index is only a module count on the FX / XMX family, where modules are removable and numbering starts at zero. The Gen3 FST bikes (SR/F, SR/S, DSR/X) in this corpus emit a lone BMS1 with no BMS0 — their numbering simply starts at one, and they have a single bonded pack. If you are on an FST bike, one BMS file is the whole story.

Practical upshot: when you export logs, take every file the app or dealer tool offers you and upload them all. See the pack catalogue for which packs are modular.

Log Entry Structure

Each log entry contains a timestamp, event type, and message with structured data. Here's how they look when parsed:

Raw log line:
level 001 AH, SOC: 97%, I: 0A, L:4089, l:4076, H:4092, B:003, PT:017C, BT:031C, PV:114540, M:Bike On
Click any field to see explanation:
Categories:
battery
temperature
motor
system
cells

Common Event Types

These are the exact strings the decoder emits, so they are what you can search and filter on. The counts are from 92,407 entries decoded out of fourteen real log files.

Event typeSourceWhat it is
RidingMBBThe once-a-minute riding snapshot: SOC, pack voltage, battery and motor current, motor RPM, all four temperatures, odometer and the module bitmask.
ChargingMBBThe same snapshot, recorded while the bike is charging.
DisarmedMBBBike awake but not live — identical telemetry with the motor at rest.
Board StatusMBBPeriodic health report from the main board.
Power On / Power OffMBBKey transitions. Paired with Sevcon Turned On / Sevcon Turned Off, these bracket a ride on a Gen1/Gen2 bike.
Module 00 … / Module 01 …MBBPer-module battery events — Registered, CAN Link Up/Down, Closing/Opening Contractor. The index is the module number.
Discharge levelBMSThe core BMS telemetry row: amp-hours, SOC, current, the L / l / H cell voltages, the B balance delta, pack and board temperature.
SOC DataBMSState-of-charge bookkeeping alongside the discharge rows.
Charged To FullBMSCharge completed. There is no event called "Charged".
Entered Idle / Running / Standby / Charging StateBMSBMS state-machine transitions, plus Entering Hibernate / Exiting Hibernate.
Discharge CutbackBMSThe BMS is limiting discharge current — low SOC, cold pack or a weak cell.
Chassis Isolation FaultBMSInsulation between the HV pack and the chassis has dropped. Also seen as Low Chassis Isolation.

Names that sound plausible but do not exist, so searching for them returns nothing: Charged, System, Error, Charge level, Chg complete, Balancing. Faults are not one event type — they appear under their own descriptive names, which is why the error catalog groups them into families rather than filtering on a single keyword.

How to Extract Logs

Log files can be extracted from your Zero using the official mobile app or by connecting directly to the bike's diagnostic port. The ZeroManual Interfacing Guide provides detailed instructions.

1
Via Zero Mobile App

Connect to your bike via Bluetooth, navigate to diagnostics, and export logs.

2
Via Diagnostic Port (Serial Console)

A serial cable to the bike's OBD-II port gives you the full log history as plain text — useful when the app download fails or truncates. See our step-by-step PuTTY console guide; the resulting .txt/.log capture uploads here just like a .bin file.

3
Upload to Zero Logs Analyzer

Our tool parses the binary data into structured, searchable entries.

Log format details are based on community reverse-engineering. For official documentation, contact Zero Motorcycles.