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.

1 „Gefällt mir“

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

Hallo sralus, Ganz tolles Projekt. Habe gerade mein neues JK-B2A8S20P in Betrieb genommen und natürlich nach einem Programm gesucht um die Daten in meinen Iobbroker zu bekommen. Hat sofort mit den Tipps aus den vorherigen Beiträgen geklappt und die Daten kommen super im Broker an. Ich habe lediglich noch die Balance Anzeige auf 8 Zellen begrenzt. Also nochmal astreine Arbeit.

Hallo sralus, ich hatte kurzzeitig das ESP homeassitant Programm am laufen, und da waren noch Daten welches die Zelle mit der grössten und der kleinsten Spannung ist. Ist das in diesem Projekt vielleicht auch möglich. Ich weiss das Programm ist schon super aber vieleicht geht da ja noch was

Hallo @all!

Ich habe meinen ESP damals nach dieser Anleitung hier aufgesetzt. Der ließt nun fleißig und fehlerfrei die bekannten Datenpunkte aus. Irgendwie fehlen mir aber Informationen zu den aktuellen Alarmen - wie komme ich da ran?
Ich möchte also gern im ioBroker sehen, welcher Alarm gerade aktuell ist bzw. welchen Status die einzelnen Alarmmeldung gerade haben.

Kann mir das jemand beschreiben? Wie kann ich die bestehenden Datenpunke um die Alarme erweitern?

Die besten Grüße an Euch fleißige Helfer...

Vielen Dank @sralus , eine absolute Top-Arbeit! :+1:
Die Installation des esp32 war überraschend einfach und lief sofort durch, die Daten erschienen kurz darauf im ioBroker. Selten so gut ohne Streß ein esp32-Projekt erledigt.

Ich benötige den Zugriff dringend, da das JK-BMS letzte Woche einen ALARM hatte, den ich nicht mit bekommen habe. ( Wer geht schon zur Batterie und schaut auf die LED :confused: )
Der Deye 12k hatte um ca. 14:00h die PV-Module abgeschaltet, die Ladespannung auf über 62 V gesetzt und den Load direkt mit dem Grid verbunden. Das BMS ging daraufhin in den Akkuschutz :grinning_face: und schaltete ab.
Den Deye für 5min. abgeschaltet und wieder eingeschaltet und alles lief wieder....
Nun kann ich mir bei Alarm sofort eine WhatsApp schicken und reagieren :grinning_face:

2 „Gefällt mir“

Auch von mir ein dickes Lob für Deine Arbeit und Deine Support.

Ich habe es auch hin bekommen, dass das Kompilieren nun Fehlerfrei läuft, bis auf das hier:

Der Sketch verwendet 1765591 Bytes (134%) des Programmspeicherplatzes. Das Maximum sind 1310720 Bytes.
Globale Variablen verwenden 65736 Bytes (20%) des dynamischen Speichers, 261944 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.
Der Sketch ist zu groß; unter https://support.arduino.cc/hc/en-us/articles/360013825179 finden sich Hinweise, um die Größe zu verringern.
Textbereich überschreitet den verfügbaren Platz auf der Platine

Compilation error: Textbereich überschreitet den verfügbaren Platz auf der Platine

Ich verwende einen einen ESP8266MOD. Der ist offensichtlich zu klein.

Ich habe natürlich gelesen und gesehen, dass Du in Deinem ersten Thread das "ESP32-DevKitC" erwähnt hast und das gleich mal bestellt:

diymore 2 Stücke für ESP32 Nodemcu Development Board für ESP32 NodeMCU Module USB C 2.4 GHz WLAN WiFi Bluetooth CH340 Chip

Hat jemand aber einer Idee was womöglich falsch sein könnte?

Womöglich in der Arduino eine Einstellung ??

Unter Werkzeuge -> Partition Scheme ->
umstellen auf > Minimal SPIFFS ( .............

1 „Gefällt mir“