Tester gesucht: Ective BMS via Bluetooth

Ausgangslage

Ich besitze eine Lithium Batterie von Ective und wollte die dringend in mein Van Pi System mit aufnehmen. Ich hab deshalb das GATT BLE Protokoll untersucht und mit Dekompilieren der Ective App ein funktionierendes Python-Skript entwickelt um sämtliche Parameter auszulesen. Code findet ihr hier.

Testen

Da die Leute hinter PeKaWay aktuell keine Batterie des Herstellers zur Verfügung haben, dachte ich wir könnten in der Community testen. Wer also so eine Batterie hat, soll das doch mal ausprobieren. Ich helfe auch gerne, wenn es Fragen gibt.

Grobe Anleitung

  1. Python File herunterladen
curl https://raw.githubusercontent.com/TKone7/ective-ble/main/ectiveBms.py -o pekaway/ble_py/ectiveBms.py
  1. In NodeRED folgende Nodes anpassen

  1. Dann gewünschte MAC Adresse über bestehendes Menü (Config > System > Bluetooth > Liontron/JBD Bat) setzen

Achtung: Damit überschreibt ihr die Funktionen für das bereits integrierte Bluetooth BMS.

Ich freue mich auf eure Resultate.

Gruss
Tobi

3 Likes

Hallo,

habe 3 Ective Akkus verbaut , könnte mich demnächst mal dran setzten.

MFG Bernd

Hey, cool! Lass mich wissen, wenn du hilfe brauchst.

Hallo,

hatte dir schon eine Mail geschrieben.
Wenn du mir bei der Software etwas hilft können wir es angehen.

MFG Bernd

Hallo TKone7,

ich hab dein Python-Script versucht zum laufen zu bringen, aber leider konnte ich keine Verbindung zum Ective BMS herstellen. Zum einen kann ich unter den ganzen MAC-Adressen das richtige Gerät nicht finden. Zum anderen kann ich zu all den MAC-Adressen keine Verbindung aufbauen. Hab es auch schon über PUTTY und gatttool probiert. Wie bist du da vorgegangen?

Viele Grüße
Dennis

Hi Dennis

Freut mich, dass du die Ective BMS Integration testen möchtest. Um das richtige Gerät zu finden, empfehle ich dir, dich mit Putty (oder anderen SSH Tool) auf das Raspi zu verbinden. Dann führst du den Scan manuell aus:

$ sudo hcitool lescan

Es werden dann vermutlich viele Geräte wiederholt angezeigt. Um den Scan zu beenden, betätige <Ctrl-C>. Du solltest unter den Resultaten ein Gerät finden, dass den selben Namen hat, wie der, der in der Ective mobile App angezeigt wird.

Wenn du glaubst die richtige MAC Adresse gefunden zu haben, kannst du mit dem gatttool einen einfachen “connect” versuchen:

$ sudo gatttool -b <deine-MAC-adresse> -I

Damit landest du in einer interaktiven Konsole mit Gatt-Kommandos. Gib dann den Verbindungs-Befehl ein:

[__:__:__:__:__:__][LE]> connect
Attempting to connect to __:__:__:__:__:__
Connection successful

Betätige <Ctrl-D> um das Gatt-Tool zu beenden.

Wenn das alles klappt, sollte das Python-Skript eigentlich laufen.

Gruss
Tobi

Hallo Tobi,

danke für die ausführliche Anleitung. Ich konnte mittlerweile die richten MAC-Adressen auswählen, nur leider kann ich über das Gatt-Tool keine Verbindung aufbauen. Anbei die Fehlermeldung:

pi@pekaway:~$ sudo gatttool -b __:__:__:__:__:__ -I
[__:__:__:__:__:__][LE]> connect
Attempting to connect to __:__:__:__:__:__
Error: connect error: Function not implemented (38)

Bisher konnte ich keine Lösung für den Fehler im Netz finden. Woran denskt du könnte es liegen?

Grüße
Dennis

Hi Dennis

In der Tat hatte ich mit ganz ähnlichen Problemen zu kämpfen. Konnte lange nichts finden, bis ich auf einige Forum-Beiträge gestossen bin, die sagten, es kann zu Störungen kommen, da das Raspi sowohl WiFi als BLE auf dem selben Chip verbaut hat. Anscheinend operiert Bluetooth auf einem sehr ähnlichen Spektrum wie WiFi 2.4 und so kann es da zu Problemen kommen speziell, wenn die Empfänger sehr nah beieinander auf der Platine verbaut sind.

Um diesen Verdacht zu bestätigen habe ich das 2.4 GHz Band des RPi deaktiviert und nur noch mit dem 5 GHz gearbeitet, und siehe da, die Probleme sind verschwunden. Um nicht von diesem “Hack” abhängig zu sein, habe ich mir am Schluss einen kleinen USB-Bluetooth-Dongle gekauft. Seither auch keine Probleme mehr.

Gruss
Tobi

Hallo zusammen,

ich wollte mal fragen ob es neue Kenntnisse zu dem Projekt gibt?

ich habe jetzt auch mal versucht das Projekt zu testen, allerdings mit wenig Erfolg. Da ich nicht wusste was man auf der Node-RED Oberfläche alles anpassen muss habe ich ectiveBms.py wie in der README beschrieben ist ($ python3 ectiveBms.py -v -d EE:EE:EE:EE:EE:EE), gestartet.
Anschließend habe ich folgende Fehlermeldung erhalten:

henni@henni-IdeaPad:~/Documents/5_semester/studienarbeit/batterie/ective-ble$ python3 ectiveBms.py -v -d 30:55:44:37:AA:51
Trying to connect to 30:55:44:37:AA:51
Subscribe for notifications
Traceback (most recent call last):
File “/home/henni/Documents/5_semester/studienarbeit/batterie/ective-ble/ectiveBms.py”, line 140, in
p.writeCharacteristic(int.from_bytes(writeHandle, ‘big’), b’\x01\x00’, True)
File “/home/henni/Documents/5_semester/studienarbeit/batterie/ective-ble/venv/lib/python3.11/site-packages/bluepy/btle.py”, line 543, in writeCharacteristic
return self._getResp(‘wr’)
^^^^^^^^^^^^^^^^^^^
File “/home/henni/Documents/5_semester/studienarbeit/batterie/ective-ble/venv/lib/python3.11/site-packages/bluepy/btle.py”, line 407, in _getResp
resp = self._waitResp(wantType + [‘ntfy’, ‘ind’], timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File “/home/henni/Documents/5_semester/studienarbeit/batterie/ective-ble/venv/lib/python3.11/site-packages/bluepy/btle.py”, line 368, in _waitResp
raise BTLEGattError(“Bluetooth command failed”, resp)
bluepy.btle.BTLEGattError: Bluetooth command failed (code: 3, error: Attribute can’t be written)

Mit $ sudo gatttool -b <deine-MAC-adresse> -I konnte ich mich mit dem BMS verbinden. Die Frequenzbänder habe ich nicht geändert und zum Auslesen habe ich meinen Laptop verwendet.

Hat jemand eine Idee?

Grüße

Henrik

Hi Henrik
Tut mir leid, dass es hier nicht auf Anhieb klappte. Tatsächlich scheint es, als ob die neue Version Ective BT Batterien ein leicht anderes Protokoll implementieren.

Ich habe nämlich mein Batterie-Setup vergrössert und eine zweite baugleiche Batterie dazugekauft. Mit der einen (alten) kann ich mich Problemlos verbinden, mit der anderen jedoch nicht und erhalte den ähnlichen/selben Fehler wie du.

Ich werde mich in den nächsten Wochen nochmal dahinter setzen und versuche eine Version zu schreiben, welche für beide Modelle funktioniert.