1. Zuhause
  2. AKKU
  3. Akku – Reset von SoH- und Ladezyklenzähler

Akku – Reset von SoH- und Ladezyklenzähler

Das folgende Kapitel enthält einige technische Basisinformationen zu den Stromer-Akkus der BQ-Serie sowie zum Reset des SoH und des Ladezyklenzählers. Dieser ist nötig, um die volle Reichweite nach dem Einbau neuer Zellen wieder erreichen zu können.

Die folgenden Informationen gelten nicht für die Akkus der BO-Serie. Diese benötigen keinen Reset von SoH und Ladezyklenzähler. Die Neureichweite ist mit neuen Zellen ohne Eingriff in das BMS erreichbar.

Allgemeine Informationen

Beim Reset muss man unterscheiden zwischen „Akku-Reset“ und Reset des „SoH“ (State of Health) sowie des „Ladezyklenzählers“.

Ein Akku-Reset kann nötig werden, wenn der Akku aufgrund eines unerwarteten externen Fehlers in der Stromer-Elektronik (z. B. Kurzschluss) in den Sicherheitsmodus geht. Wenn dies passiert, wird der 48-V-Ausgang des Akkus deaktiviert und der Stromer kann nicht mehr gefahren werden. Der Akku muss über den Händler an die myStromer AG gesendet werden, um die Sicherheitsstellung zurückzusetzen.

Anders liegt der Sachverhalt beim Reset des State of Health (SoH) und des Ladezyklenzählers. Dieser Reset wird bei den Stromer BQ-Akkus nach einer Zellerneuerung (Refit, Refurbishing, Aufbereitung) nötig.

Reset – SoH- und Ladezyklenzähler – warum?

Nach meinem Wissenstand ist ein SoH- und Ladezyklenreset bei den alten BO-Akkus und den älteren BQ-Akkus (vor 2016) nicht nötig. Das BMS «akzeptiert» die neuen Zellen auch ohne Reset, und die Neukapazität und damit die Neureichweite kann wieder erreicht werden.

Bei der BQ-Serie ab ca. 2016 funktioniert das nicht mehr. Der Wert des SoH und des Ladezyklenzähler wird auch mit neuen Zellen nicht auf die Werkseinstellung zurückgesetzt. Das BMS rechnet nach wie vor mit dem alten SoH-Wert. Das Resultat ist, dass der Akku nun zwar neue Zellen hat, das BMS aber mit der alten Kapazität rechnet und nur die alte Reichweite gefahren werden kann.

Stromer Akkumodelle- und Lieferanten

Welche Akkumodelle es von Stromer gibt kann man im Kapitel Modellpalette – Technische Daten und Sicherheitshinweise nachlesen.

Bei den neueren Akkus der BQ-Serie mit 48-V-Nennspannung gibt es zwei Lieferanten, HTE (TD Hightech Energie) und SMP (Simplo Technology Co. Ltd.). Sie unterscheiden sich äusserlich durch die Anzahl Schrauben beim Ladesockel.

Intern ist der Unterschied beim Aufbau der Platine zu sehen. Akkus von HTE haben eine gut sichtbare CMOS-Batterie, Simplo kommt ohne diese aus. Weiter werden verschiedene Prozessoren verwendet und bei Simplo scheint ein prozessor-externes EEPROM zu fehlen.

BMS eines BQ983 Akkus von HTE
BMS eines Akkus von SMP

Reset mit Reset-Jumper

Für den DIY ist diese Variante die einfachste. Es ist keine spezielle Software nötig. Der Nachteil ist, dass der Akku geöffnet werden muss. Dazu muss man wissen, wo und wie ein solcher Reset gemacht werden kann.
Die Entwickler eines BMS erleichtern dem Anwender manchmal diese Aufgabe, indem sie einen «Reset-Jumper» auf der Platine anbieten. Das ist z. B. bei den Stromerakkus der BO-Serie der Fall – die Details dazu gibt es hier. Bei den BQ-Akkus fehlt dieser bzw. er ist nicht als solcher gekennzeichnet.

Es gibt mehrere Methoden, den verwendeten Microchip und/oder das EEPROM bei einem BQ-Akku zurückzusetzen: Link 1 | Link 2 | Link 3. Der Schlüssel liegt bei der Molex Picoblade 1.25 Steckverbindung «J304» (Pin 4 & 6) auf der Rückseite des BMS. Sie sind zwar nicht als Reset-Jumper bezeichnet, funktionieren aber als solche.

Softwarereset über den CAN-Bus

Die folgenden Abschnitte gelten nur für BQ-Akkus mit 3 Schrauben (HTE)

Braucht es persönliche IT Kenntnisse für den Reset?

Es geht ohne IT-Kenntnisse. Die Schweizer Firmen Swissvolts | Bünzli Batteries | upVolt bieten den Reset über den CAN-Bus an. Swissvolts und Bünzli Batteries verwenden dabei eine modifizierte Software auf Basis der Stromer-Diagnosesoftware. upVolt lässt den Service bei Bünzli Batteries machen. Mit der Software können folgende Parameter ausgelesen bzw. zurückgesetzt werden:

  • Auslesen: Produktionsdatum, Ladezyklen, State of Health (SoH)
  • Programmierung der Ladeendspannung des Akkupacks
  • Rücksetzung des SoH auf 100 % und des Ladezyklenzähler auf 0.
  • Reset der Sicherheitsstellung (blockierte Batterie) z. B. aufgrund eines Kurzschlusses im 48-V-System

Bei meinem BQ983-Akku konnte ich zusehen. Der Rosenbergerstecker wurde mit dem Akkusockel verbunden und in wenigen Sekunden war der SoH/Ladezyklenzähler auf Werkseinstellung gesetzt. Allerdings konnte das vor Ort nicht kontrolliert werden weil mein Akku 100 % geladen war. Man sagte mir ich solle ein paar km fahren. Das Omni zeigte bei der ersten Fahrt zuerst einen SoC von 74 % an, was dem alten SoH entsprach. Tatsächlich sprang der Wert nach ein paar km Fahrt auf 100 %. Über das Sromer API konnte ich danach den SoH auslesen – er lag wieder bei 100 %!

Bis Juli 2026 bot nur eine Handvoll Refurbisher die Möglichkeit an, den SoH (State of Health) und den Ladezyklenzähler bei Akkus des Herstellers HTE (mit 3 Schrauben) zurückzusetzen.

Die Firma Bünzli Batteries bietet seit Juli 2026 neu auch den Reset bei den BQ-Akkus von Simplo (mit 4 Schrauben) an.

Reverse Engineering

Entscheidend für den Reset des SoH und Ladezyklenzählers sind die beiden CHIP’s Microchip PIC18F4685 und das externe Microchip EEPROM 24LC256. Um die «Innereien» zu erforschen, muss man etwas Forensik betreiben.

Platinenaufbau BQ-Akku mit 3 Schrauben (HTE)

Hier zeige ich eine Platine des BQ-Akkus von HTE (3-Schrauben) und verorte die massgeblichen Bauteile für einen SoH/Ladezyklenzähler-Reset.

Die Öffnung der Molex Steckverbindungen ‚J303‘ & ‚J304‘ (Bild in der linken Ecke) liegt auf der Gegenseite der Platine.

J304 ist erst nach dem Ausbau des Akkupacks aus dem Aluminiumgehäuse und nach dem Aufschneiden der Schutzfolie zugänglich

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

Sie bedienen die entsprechenden Pins des Microchip PIC18F4685.

OD Dump des CAN-Bus

OD steht für Octal Dump und bezeichnet ein UNIX-Kommando, mit dem ein Dump (Speicherauszug) in verschiedenen, für Menschen lesbaren Formaten möglich ist. Dieser Dump ist nötig, um ein sog. Reverse Engineering durchführen zu können. Er dient als Basis, um herauszufinden, welche Speichersegmente für einen SoH/Ladezyklenzähler-Reset zurückgesetzt werden müssen.

Software: Mit dumpcap kann ein OD-Dump realisiert und danach in Wireshark analysiert werden. Wie das geht, kann man u. a. hier anschauen. Weitere Theorie gibt es hier. Verschiedene CAN-Bus-Adapter bieten auch All-in-One-Lösungen an.

Hardware: Hardwareseitig braucht man einen CAN-Bus-Adapter, um den Bus sniffen (abhören) zu können. Siehe u. a. 1 | 2 | 3.

Dump der BQ-Akkus: Im speedpedelecreview.com-Forum hat der User Jebolisch einen solchen CAN-Bus-Dump für die Akkus BQ983 & 814 von HTE sowie den BQ618/655 von Simplo veröffentlicht und soweit möglich dokumentiert. Ich habe die Datei grafisch etwas aufgehübscht und stelle sie hier zur Verfügung.

Schreiben und Lesen eines EEPROM

Um die entscheidenden Speicheradressen, in denen der SoH/Ladezyklenzähler gespeichert ist, neu schreiben zu können muss man wissen wie ein EEPROM (Electrically Erasable Programmable Read-Only Memory) gelesen/beschrieben wird. Ein EEPROM behält seine gespeicherten Daten auch nach dem Ausschalten der Stromversorgung bei. Diese Funktion ist nützlich für die Speicherung kritischer Daten, die über Stromzyklen hinweg erhalten bleiben müssen. Bsp. sind Konfigurationseinstellungen, Kalibrierungswerte, Benutzereinstellungen, Speicherung der kritischen Variablen des Programms oder historische Datenprotokolle.

Wie ein EEPROM programmiert werden kann ist z. B. hier beschrieben.

Voraussetzungen
  • Python-Installation: Stelle sicher, dass Python auf deinem System installiert ist.
  • I2C-Bibliothek: Du benötigst eine Python-Bibliothek, die die I2C-Kommunikation ermöglicht. Eine beliebte Option ist smbus2.
  • Hardware: Der PIC18F4685, der 24LC256 und die entsprechenden Verbindungen müssen entsprechend aufgebaut sein.
Beispiel für das Schreiben und Lesen
1 import smbus2

2 # I2C-Bus und EEPROM-Adresse anpassen
3 bus = smbus2.SMBus(1) # Ändere 1, wenn du einen anderen Bus verwendest
4 address = 0x50 # Ändere die Adresse, wenn sie bei deinem EEPROM anders ist

5 def write_byte(register, data):
6 "Schreibt ein Byte an die angegebene Registeradresse im EEPROM."
7 bus.write_byte_data(address, register, data)

8 def read_byte(register):
9 "Liest ein Byte von der angegebenen Registeradresse im EEPROM."
10 return bus.read_byte_data(address, register)

10 # Beispiel für das Schreiben und Lesen
11 write_byte(0x00, 0x55) # Schreibe 0x55 an die Adresse 0x00
12 data = read_byte(0x00) # Lese das Byte von der Adresse 0x00
13 print("Gelesenes Byte:", data)
Erklärung
  • Import: Die smbus2-Bibliothek wird importiert, um die I2C-Kommunikation zu ermöglichen.
  • I2C-Bus und Adresse: Die Variablen bus und address werden definiert, um den I2C-Bus und die Adresse des EEPROMs anzugeben.
  • Funktionen: write_byte: Schreibt ein Byte an eine bestimmte Adresse im EEPROM. ead_byte: Liest ein Byte von einer bestimmten Adresse im EEPROM.

Resetbrücke: Am besten nimmt man einen Molex Picoblade 1.25 Stecker mit entsprechend vorkonfektionierter Brücke um nicht an der J304 Buchse selber werkeln zu müssen (Gefahr mechanischer Beschädigung, versehentlicher Kurzschluss mit anderen Pins…)

Den Ablauf des Reset beschreibe ich hier nicht näher. Findige DIJ werden mit den gegebenen Hinweisen klarkommen.

Weitere Informationen

Datenblatt Microchip PIC18F4685 Datenblatt Microchip EEPROM 24LC256

Dokumentation 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).

Python-Documentation This is the official documentation for Python 3.13.1.

Hast du Feedback? – gerne unten im Kommentarfeld.

Aktualisiert am 10. August 2026
War dieser Artikel hilfreich?

Verwandte Artikel

Einen Kommentar hinterlassen