JKBMS auslesen über BLE (Bluetooth) oder RS485 Adapter mittels EPS, ioBroker

Hallo,

Ich habe vor ca. 3 Jahren dieses JKBMS auf einen ESP32 installiert und es hat bis gestern auch ohne Probleme funkioniert.

Aber heute auf einmal habe ich über Mqtt keinen Daten mehr empfangen –> warum … keine Ahnung –> EPS32 leuchtet aber er verbintet sich nicht mehr mit dem JKBMS!!

Jetzt wollte auf dem EPS32 nochmal die Software neu flashen aber scheitere bei Adruino an der Kompilierung und bekomme immer die Fehlermeldung “compilation terminated. exit status 1 Compilation error: driver/can.h: No such file or directory”

Ich weiss echt nicht mehr wie ich das vor ca. 3Jahren gelöst habe :face_with_raised_eyebrow:

LG Gerald

Edit: Die Lösung ist bei der Boardverwaltung bei ESP 32 von Espressif System die Version 1.0.4 zu installieren!!

Ist ja schon länger her, ich schreib trotzdem mal was dazu. Wer home assistant und somit esphome nutzt, muss drauf achten esp mit ch340 zu kaufen. Weil esphome über usb am pc den ch340 treiber/schnittstelle braucht. Ich hab 10 stück esp8266 ohne ch340 gekauft. Dann muss man in esphome ein gerät anlegen, ein 3lf file exportieren. Dieses auserhalb von esphome flashen. Danach ist der esp über wlan auch von esphome zu erreichen.

Ich habe ein jk bms über esp32 in home assistant. Wer den code braucht kann mir eine nachricht schreiben.

Vielen Dank sralus! Habe es hier auf einem Esp32-C3-Supermini zum laufen bekommen.

Hat etwas gedauert, dass ich gemerkt habe, dass man nur das JK-Standard-Passwort nutzen kann und wieder setzen muss.

1 „Gefällt mir“

moin,

Ich habe soweit Verbindung über BLE und bekomme Daten über MQTT.

Ich bekommen aber nur die Werte von den Zellenspannungen und vom Cycle Counter.

Von dem Rest bekomme ich keine Daten. Hat da jemand eine Idee woran es liegen könnte.

verwendet habe ich :Arduino Version 1.8.57.0 , Bordimage ESP32 Espressif ( 1.0.4),ESP32D,JK-B2A8S-20P-V11.6.1, (SW_Version "3.6 ino)

Wenn nur Zellspannungen und ggf. Cycle_Count kommen, ist meistens der JK-Datenframe nicht komplett im Buffer oder die Byte-Offsets passen nicht zum BMS/Firmware. Zellspannungen stehen am Anfang des Frames und werden auch bei unvollständigem Empfang korrekt dekodiert, während Spannung/Strom/Leistung/Temps später im Frame liegen und dann 0 bleiben. Lösung: im Notify-Callback prüfen, ob wirklich ein kompletter 0x02 Live-Frame mit ~300+ Bytes zusammengesetzt wird (frame counter/loggen), und ggf. Offsets/Indexe an das konkrete Modell (JK-B2A8S-20P-V11.6.1) anpassen bzw. neuere ESP32 Core Version nutzen.

@Lösung: im Notify-Callback prüfen, ob wirklich ein kompletter 0x02 Live-Frame mit ~300+ Bytes zusammengesetzt wird (frame counter/loggen).

Kannst du mir den Punkt zeigen , wo ich die Variable finde, die die Daten enthält oder die Datenlänge.

Was ist jetzt korrekt angepasst (8S)

  • Geraetename = "JK_B2A8S20P"
  • JK_CELL_COUNT = 8
  • BLE_Data_analyse.ino: liest nur 8 Zellen, setzt 9–16 auf 0
  • Fallbacks:
    • Packspannung = Summe der 8 Zellen, wenn Frame-Packspannung 0 ist
    • Power = V * I, wenn Reported Power 0 ist
  • Publish_data.ino: MQTT Zellspannungen nur für 8 Zellen
  • SSID/Passwort sind Platzhalter: "YOUR_SSID" / "YOUR_WIFI_PASSWORD"

Ich kann leider nicht 100% garantieren das es funktioniert weil ich kein 8S habe - Teste bitte mal
JKBMS-WI_8S_sanitized.zip (24,7 KB)

Danke für die schnelle Antwort.
Ich habe beim "kompilieren" noch ein paar Fehler bekommen, kannst du was damit anfangen.
Ist bei dir die Überprüfung "IO" durchgelaufen ?

FehlKompilieren.txt (1,8 KB)

Hallo,

ich kann Dir als Tip geben, dass es bei den ESPs und Arduino ganz empfindlich darauf ankommt, keine neueren Library-/Boardversionen zu verwenden, als die mit denen der Code seinerzeit entworfen wurde. Da ist nix abwärtskompatibel.

Ich bin da auch drübergestolpert vor ca. 1 Jahr. Irgendwo im Thread sind die Versionen von sralus auch erwähnt, glaube ich mich erinnern zu können.

Lösung für Kompilierfehler (ESP32_BLE_Arduino falsche Library aktiv)

Du nutzt gerade die falsche BLE-Library aus deinem Arduino-Libraries-Ordner (ESP32_BLE_Arduino). Die ist nicht kompatibel mit dem aktuellen ESP32-Boardpaket und verursacht genau diese Fehler:
ringbuf_type_t not declared, void value not ignored, std::string -> String.

So bekommst du es sofort zum Kompilieren:

  1. Arduino IDE schließen
  2. Öffne diesen Ordner:
    C:\Users\<DEINNAME>\Documents\Arduino\libraries\
  3. Ordner umbenennen oder löschen:
    ESP32_BLE_Arduino → z.B. ESP32_BLE_Arduino_OFF
  4. Arduino IDE neu starten
  5. Nochmal kompilieren

Wichtig: Im Kompilier-Log muss dann stehen:
:white_check_mark: Benutzt: ...\AppData\Local\Arduino15\packages\esp32\hardware\esp32\...\libraries\BLE
:cross_mark: und nicht mehr ...\Documents\Arduino\libraries\ESP32_BLE_Arduino\...

Optional (empfohlen): Im Boards Manager „esp32 by Espressif Systems“ auf eine neuere Version updaten (2.x/3.x). - PS : JKBMS auslesen über BLE (Bluetooth) oder RS485 Adapter mittels EPS, ioBroker - #792 von sralus

Ich hab jetzt noch mal die Versionen angepasst

  • Arduino IDE: 2.3.6
  • ESP32 Boardpaket ("esp32 by Espressif Systems"): 3.3.3
  • PubSubClient BY NICK 2.8.0

Board
Auswahl ESP 32 Dev Modul

bekomme noch ein Fehler ->
undefined reference to `Datenanalyse()'

haste noch mal einen Tipp , was ich tun könnte ?

FehlKompilieren.txt (996 Bytes)

Fix für “undefined reference to Datenanalyse()” (wenn du mein ZIP nutzt)

Dieser Fehler heißt: Datenanalyse() wird aufgerufen, aber die Datei mit der Funktion wird nicht mit kompiliert. Das passiert fast immer, wenn du nur eine .ino geöffnet hast statt den ganzen Sketch.

So machst du es richtig:

  1. ZIP komplett entpacken
  2. In den entpackten Ordner gehen
  3. Wichtig: Öffne NICHT irgendeine einzelne Datei, sondern die Hauptdatei im Sketch-Ordner, sodass Arduino alle Tabs lädt.
    → Doppelklick auf: JKBMS-WI.ino (die muss im Ordner liegen, zusammen mit allen anderen .ino Dateien)
  4. In der Arduino IDE musst du dann oben als Tabs sehen:
    BLE_BMS_Connection.ino, BLE_Data_analyse.ino, Publish_data.ino, usw.
  5. Wenn der Tab BLE_Data_analyse.ino fehlt, dann ist die Datei nicht im gleichen Ordner oder nicht geladen → dann kommt genau dieser Linker-Fehler.

Kontrolle: In BLE_Data_analyse.ino muss exakt stehen:
void Datenanalyse() { ... }
(groß/klein muss exakt stimmen)

Danach kompiliert es.

Super - danke , jetzt hat es geklappt.:hugs: :+1:

Ich habe den entpackten Ordner in JKBMS-WI noch umbenant, dann ging es.

Alle Daten die ich brauche sind da.

TOP !! das freut mich und das interne Webinterface auch ?
http://XXX.XXX.XXX.XXX/web/index.html - Also XXX... IP des ESP32
ich habe für mich ein größeres ESP32 genommen weil ich beim Webinterface manchmal ein bug hatte .. WIFI verbindung bricht ab ...
Gruß Sralus