General information
When resetting, a distinction must be made between 'battery reset' and resetting the 'SoH' (State of Health) and 'charge cycle counter'.
A battery reset may be necessary if the battery switches to safety mode due to an unexpected external fault in the Stromer's electrical system (e.g. short circuit). If this happens, the 48 V of the battery is switched off and the Stromer can no longer be ridden. The battery must be returned to Stromer to reset the safety mode (battery reset).
The situation is different when resetting the State of Health (SoH) and the charge cycle counter, which is necessary after a cell refit (refurbish).
SoH & charge cycle counter reset - why?
As far as I know, a specific SoH/charge cycle reset is not necessary after a cell replacement for the old BO batteries and the older BQ batteries (before 2016). The BMS 'accepts' the new cells and the new range can be achieved again. This is not the case with the BQ series batteries from approx. 2016 onwards, where the old SoH and charge cycle counter value stored in EEPROM 24LC256 is NOT reset to the factory setting when the cells are replaced. The BMS continues to 'calculate' with the old values. The result is that the battery now has new cells but only the old 'range' can be driven. A reset is not possible with the BQ batteries via a simple reset button or jumper on the circuit board. Instead, this is done via the CAN bus, which requires the corresponding software.
Do I need to have IT knowledge? Is it possible without opening the battery?
It works without IT knowledge and without opening the battery. The Swiss company Swissvolts offers the reset via the CAN bus. I was able to watch this on my BQ983. The Rosenberger plug was connected to the battery socket and in a few seconds the SoH/charge cycle counter was set to the factory setting. However, this could not be checked on site because my battery 100 % was charged. I was told to drive a few kilometers. The Omni initially showed a SoC of 74 % on the first drive, which corresponded to the old SoH. After driving a few kilometers, the value actually jumped to 100 %. I was then able to read out the SoH via the API - again 100 %!
Battery types
You can find out which battery models are available from Stromer at 'Model range - Technical data and safety instructions' read more.
There are two suppliers of the newer BQ series batteries with 48 V nominal voltage, HTE (TD Hightech Energie) and Simplon. They differ externally in the number of screws on the charging base.

PCB of the BQ batteries from HTE (3-screw)
Here I show a circuit board of the BQ battery from HTE (3-screws) and locate the relevant components for a SoH/charge cycle counter reset. The opening of the JST GH connectors 'J303' & 'J304' (picture in the left corner) is on the opposite side of the board.

J304
1- x
2- PGC= Programming Clock Pin
3- PGD= Programming Data Pin
4- GND= Ground (Vss)
5- VDD= Power Supply
6- VPP= Programming Voltage
J303
1- GND= Ground
2- SCL= Serial Clock
3- SDA= Serial Address/Data I/O
4- VDD= Power Supply
Reverse engineering
The two CHIPs are crucial for resetting the SoH and charge cycle counter Microchip PIC18F4685 and the external Microchip EEPROM 24LC256. To explore the 'innards' you have to do some forensics.
OD dump of the CAN bus
OD stands for octal dump and refers to a UNIX command with which a dump (memory dump) is possible in various human-readable formats. This dump is necessary in order to be able to carry out so-called reverse engineering. It serves as a basis for finding out which memory segments need to be reset for an SoH/load cycle counter reset.
Software: With dumpcap an OD dump can be realized and then Wireshark be analyzed. You can find out how to do this in here view. There is more theory here. Various CAN bus adapters also offer all-in-one solutions.
Hardware: On the hardware side, you need a CAN bus adapter to be able to sniff (listen to) the bus. See e.g. 1 | 2 | 3.
Dump of the BQ batteries: In the speedpedelecreview.com - Forum the user has Jebolic published such a CAN bus dump for the BQ983 & 814 batteries from HTE and the BQ618/655 from Simplon and documented it as far as possible. I have made the file a bit prettier graphically and put it here available.
Writing and reading an EEPROM
In order to be able to rewrite the decisive memory addresses in which the SoH/charge cycle counter is stored, you need to know how an EEPROM (Electrically Erasable Programmable Read-Only Memory) is read/written. An EEPROM retains its stored data even after the power supply has been switched off. This function is useful for storing critical data that must be retained over power cycles. Examples are configuration settings, calibration values, user settings, storage of the program's critical variables or historical data logs.
How an EEPROM can be programmed is described, for example here described.
Prerequisites
- Python installation: Make sure that Python is installed on your system.
- I2C library: You need a Python library that enables I2C communication. A popular option is
smbus2
. - Hardware: The PIC18F4685, the 24LC256 and the corresponding connections must be set up accordingly.
Example for writing and reading
1 import smbus2
2 # Adapt I2C bus and EEPROM address
3 bus = smbus2.SMBus(1) # Change 1 if you are using a different bus
4 address = 0x50 # Change the address if it is different for your EEPROM
5 def write_byte(register, data):
6 "Writes a byte to the specified register address in the EEPROM."
7 bus.write_byte_data(address, register, data)
8 def read_byte(register):
9 "Reads a byte from the specified register address in the EEPROM."
10 return bus.read_byte_data(address, register)
10 # Example for writing and reading
11 write_byte(0x00, 0x55) # Write 0x55 to the address 0x00
12 data = read_byte(0x00) # Read the byte from address 0x00
13 print("Read byte:", data)
Explanation
- Import: The
smbus2
-library is imported to enable I2C communication.
- I2C bus and address: The variables
bus
andaddress
are defined to specify the I2C bus and the address of the EEPROM.
- Functions:
write_byte
Writes a byte to a specific address in the EEPROM.ead_byte
Reads a byte from a specific address in the EEPROM.
Is a reset also possible in hardware (reset jumper)?
This variant is the simplest for DIY. No software needs to be written. The disadvantage is that the battery must be opened. You also need to know where and how such a reset can be carried out.
BMS developers sometimes make this task easier by offering a 'reset jumper' on the circuit board. This is the case, for example, with the power batteries of the BO series (See also 'battery reset'). This is missing on the BQ batteries.
There are several methods of resetting the microchip and the EEPROM: Link 1 | Link 2 | Link 3. With the BQ batteries, the key is located at the JST GH connector 'J304' (pins 4 & 6) on the back of the BMS.

They operate the corresponding pins of the Microchip PIC18F4685.

Further information
Data sheet Microchip PIC18F4685 Data sheet Microchip EEPROM 24LC256
Documentation CIA 301 CiA develops and publishes technical documents. Specifications contain functional requirements and permissions to be implemented in hardware or software. Typical examples are the CANopen CC (classic) application layer (CiA 301) or the CANopen device profile for generic I/O modules (CiA 401 series).
Phyton Documentation This is the official documentation for Python 3.13.1.
Have fun! ... and as written - feedback is always welcome!