Skip to main content
zerologs
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: 3 October 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, yet it is still a Cypher II motorcycle. 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, with 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 Gen1 or Gen2 log contains a road-speed field. Where you see km/h on those bikes, 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 logs bike state and the power limits, and its common telemetry record carries five temperatures and, only while the high-voltage bus is live, pack voltage, current and motor RPM. Road speed is written only in the rarer 0x52/0x53 records, and the odometer only there and only on newer firmware, so the BMS stays the main 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: a 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, which is why there can be more than one BMS file. Details below.

Here is one second of a real shutdown, with both boards writing at once. They log the same contactor opening under two different names, and each board measures the same pack voltage with its own instrument.

The same instant, twiceFXS 2016 switching off08:17:218 lines · 6 bike, 2 packMBBPower OffMBBSevcon Turned OffMBBModule 00 Opening Contractor107.998 VMBBModule 01 Opening Contractor107.971 VMBBDisabling External Chg 0 Charger 2MBBDisabling External Chg 1 Charger 3BMSContactor was Opened107.997 VBMSSystem Turned OffOne contactor, two vocabulariesThe two highlighted rows are the same piece ofhardware opening, named differently.1 mV apart: two voltmetersbattery management107.997 Vmain board · module 00107.998 Vmain board · module 01107.971 VTwo modules in parallel: one pack voltage,read three times. And 740 seconds in this pair offiles carry lines from both boards.
The same contactor, the same second, two names and two independent voltmeters 1 mV apart. It shows why a Zero hands you two files: neither file says the two events are the same thing, so you have to put them on one axis. This second is ordinary rather than rare: 740 seconds in this pair carry lines from both boards.

From Anatomy of a Zero log, which publishes real extracts for every decode route: switching on, riding, charging, parked, a fault and switching off.

If your bike has two battery modules, it writes two BMS files, and uploading only one leaves out half your pack

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, covering the same days in separate 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, meaning 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.

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.

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 what it means:
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 log 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, which helps 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.