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

Hallo zusammen,

ich versuche das auch grade zum Laufen zu bewegen, leider bisher erfolglos .. .

Die Arduino IDE 2.0.3 wird verwendet.

Als Gerät habe ich das AZ-Delivery ESP32 Dev Kit V2 ESP-WROOM-32

Als Device habe ich ESP32 Dev Module und ESP32-WROOM-DA Module getestet und konnte jedesmal ein Testscript kompilieren und hochladen

Als Libraries habe ich installiert: PubSubClient by Nick V2.8.0

Bluetooth habe ich wie hier beschrieben installiert: Getting Started with the ESP32 on Arduino IDE [Full Guide 2020]

Als Fehlermeldung beim Compile kommt:
exit status 1
Compilation error: exit status 1

Keine zusätzlichen Informationen :frowning:

EDIT: Ich habe die Bluetooth Library getauscht in die ESP32_BLE_Arduino

Ergebnis:

In file included from c:\Users\roger\Documents\Arduino\libraries\ESP32_BLE_Arduino\src/BLEAdvertising.h:15,
from c:\Users\roger\Documents\Arduino\libraries\ESP32_BLE_Arduino\src/BLEServer.h:19,
from c:\Users\roger\Documents\Arduino\libraries\ESP32_BLE_Arduino\src/BLEDevice.h:18,
from C:\Users\roger\Downloads\0=6605-BLE_client_V3.4\BLE_client\BLE_client.ino:1:
c:\Users\roger\Documents\Arduino\libraries\ESP32_BLE_Arduino\src/FreeRTOS.h:61:28: error: 'ringbuf_type_t' has not been declared
Ringbuffer(size_t length, ringbuf_type_t type = RINGBUF_TYPE_NOSPLIT);
^~~~~~~~~~~~~~
exit status 1
Compilation error: exit status 1

Habt ihr ne Idee wo ich schauen kann?

Neuer Tag, neues Glück -- oder auch nicht. Ich habs auf nem neuen Rechner versucht - gleiches Ergebnis.
Dann habe ich aber gesehen, dass man detailliertere Fehlermeldungen bekommen kann. Mir fällt folgendes auf:

C:\Users\roger\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6/tools/sdk/esp32/include/driver/include/driver/can.h:13:2: warning: #warning driver/can.h is deprecated, please use driver/twai.h instead [-Wcpp]
#warning driver/can.h is deprecated, please use driver/twai.h instead
^
In file included from C:\Users\roger\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6/tools/sdk/esp32/include/driver/include/driver/can.h:15,
from C:\Users\roger\Downloads\7467=6664-BLE_client_V3.6\BLE_client\BLE_client.ino:11:
C:\Users\roger\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.6/tools/sdk/esp32/include/hal/esp32/include/hal/can_types.h:21:2: warning: #warning hal/can_types.h is deprecated, please use hal/twai_types.h instead [-Wcpp]
#warning hal/can_types.h is deprecated, please use hal/twai_types.h instead
^

C:\Users\roger\Downloads\7467=6664-BLE_client_V3.6\BLE_client\Victron_CAN.ino: In function 'void setup_can_driver()':
C:\Users\roger\Downloads\7467=6664-BLE_client_V3.6\BLE_client\Victron_CAN.ino:11:28: warning: missing initializer for member 'twai_general_config_t::intr_flags' [-Wmissing-field-initializers]
.clkout_divider = 0};
^

Hier also mal ein paar Warnungen - aber keine Fehler.

Creating esp32 image...
Merged 25 ELF sections
Successfully created esp32 image.

--> Also hat es doch geklappt? Wieso programmiert er es dann nicht?

Ich nehme an deswegen:

exit status 1
Compilation error: exit status 1

Hi, habe ein Problem in arduino, habe Compilererror.

Welche Settings muss man einstellen , bzw Board: habe Arduino 32 DEV.

Oder habe ich das falsche Board?

program: V3.4 BLE_connection

Danke VG

text section exceeds available space in board
Globale Variablen verwenden 56560 Bytes (17%) des dynamischen Speichers, 271120 Bytes für lokale Variablen verbleiben. Das Maximum sind 327680 Bytes.

@riker1 Moin, schau mal auf Seite 1 im ersten Eintrag ganz unten, hast du das so umgestellt ?

top genau danach habe ich gesucht, habe es echt überlesen. Danke

Bei mir gleicher Fehler wie Riker, ich hab gedacht, dass es in Verbindung mit dem ESP8266, gemeint ist.

Ander Frage, kann man dennoch mit RS485 die Daten ziehen?

Ich möchte nen Victron 5000 mit Cerbo einbinden. Die CAN Lösung gefällt mir sehr, da die galvanische Trennung auch gleich realisiert wird.

Hallo

Hat jemand Interesse daran das Prog für den ESP32 zu ertsellen? Gerne auch komplett mit Gerät. Ich möchte den Akkustand als 0-10V Signal haben.

Ich komme mit dem hier vorgestellten Prog nicht weiter.

Also ohne WIFI

ohne MQTT

ohne ioBroker.

Den Akkustand mit BT auslesen und als 0-10V Signal ausgeben.

Gruß

Henrik

@henrik_79 Die Software läuft bei mir auf einem ESP32 ohne Probleme.

Da muss nichts geändert werden.

Bluetooth, WLAN, OTA, etc.

Neustart und es wird automatisch verbunden.

MQTT auf Homeassist bzw. Mosquito und weiter auf Grafana.

@unixtom

Die Software habe ich auch auf dem ESP32 geladen. Nach dem Booten verbindet er sich mit dem WIFI. Dann versucht er sich mit dem MQTT zu verbinden.

Das gibt es bei mir nicht. Selbst das WIFI brauche ich nicht am Einsatzort. Ich brauche nur den Akkustand als 0-10V Signal oder als PWM Signal.

Also ca so Akkustand: 10% = 1V / 30% = 3V / 100% = 10V

Ich brauche den Wert in einer SPS Steuerung.

Gruß

Henrik

Moin Henrik,

Du könntest einfach in der main loop den Ladestand als PWM ausgeben, ohne den ganzen WLAN / MQTT Kram rauszuschmeissen. Also einfach mal in der Arduino Doku nachschauen, wie man eine PWM ausgibt.

Ich habe mir den Code auch so erweitert, dass in der loop noch ADCs ausgelesen werden, ging problemlos {green}:wink:

@all:

Aber womit ich leider überfordert bin, ist das Senden einer Konfiguration über BT, also Parameter des BMS ändern. Dafür müsste der Code so erweitert werden, dass über BT auch gesendet werden kann (bisher wird ja scheinbar nur gelesen). Ist da jemand dran oder kann mir etwas beim Einstieg helfen?

Ich hatte schon überlegt, stattdessen per CAN die zu ändernden Parameter zu senden (ein paar Bytes über UART zu senden würde ich vermutlich noch alleine hinbekommen). Aber wäre ja irgendwie doof, zusätzlich noch CAN anzuschließen, wenn die BT Verbindung soweit schon steht. {green}:crazy:

Außerdem müssten die Parameter natürlich auch noch vom iobroker (bzw. bei mir FHEM) zum ESP gesendet werden. Da bin ich auch raus {green}:excitement:

Hallo

Ich habe V3.6 auf den ESP geladen.

Nach dem Booten bekommt er auch eine IP zugewiesen.

Dann bekomme ich wiederkehrend folgende Meldungen im S.Monitor.

BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
MQTT Client not connected
MQTT time for reconnect
MQTT connection failed!
MQTT reconnect Error
BLE -> Reconnecting!
BLE Advertised Device found: Name: , Address: 78:5c:65:09:0f:36, manufacturer data: 060001092002bce278ed10fdde11a20c6179e57b34a764b4df9b7a0e77
MQTT Client not connected
MQTT time for reconnect

Ich habe den Namen von dem BMS eingegeben die auch in der APP angezeigt wird.

Hier meine Anpassungen

bool debug_flg = true;
bool debug_flg_full_log = true;
//########### Settings beginnen #########
//OTA Setting
#define OTA_Hostname "JKBMS_ESP32" // -> hier ändern wenn OTA Name anders sein soll
#define OTA_Passwort "xxxxxx" // -> hier ändern wenn OTA Passwort anders sein soll
// MQTT Setting
const char* mqtt_server = ""; // -> hier die IP des MQTT Server eingeben
const int mqtt_port = 1883; // -> hier den Port einstellen für den MQTT Server
const char* mqtt_username = ""; // -> hier MQTT Benutzername eintragen
const char* mqtt_passwort = ""; // -> hier MQTT Passwort eingeben
#define mqttname "BMS_Watchdog" // -> hier wird der MQTT Gerätename festgelegt
const int mqttpublishtime_offset = 1000; //-> hier einstellen wie oft Danten gesnedet werden sollen 1000 = jede Sekunde
// CAN Settings
bool CAN_use = false; // -> true wenn ein CAN MOdul vorhanden und verwendet wird für die Paylontech simulation
const int CAN_Cylcetime = 1000;

//W-LAN Setting
const char* ssid = "XXXXXXXXX";
const char* password = "XXXXXXXX";
//BMS-BLE Settings
const char* Geraetename = "JK-BD6A20S10P"; //JK-B2A24S20P JK-B2A24S15P

Ich hoffe ihr könnt mir damit etwas helfen.

Gruß

Henrik

@henrik_79 Moin, ich denke der Fehler ist das du keinen MQTT Server angegeben hast. Ob der ESP sich mit dem JK per BLE verbindet hörst du auch an einem 2 maligen Piepton der vom JK ausgegeben wird. Ausserdem leuchtet dann die LED an der Unterseite dauerhaft. Wenn keine Verbindung besteht blinkt die LED. Es ist auch nur möglich eine Verbindung zur zeit aufzubauen, also wenn du denn ESP verbindest erst das Smartphone trennen.

@henrik_79

Du brauchst im Arduino nur auf Änderung oder Wert testen den Du brauchst und statt MQTT PWM. Arduino hilft dir da sogar.

Hallo

Ich habe auch eine IP bei MQTT Server abgegeben. Die gibt es aber nicht.

Das bringt nichts an der Stelle.

Die Ganze Abfrage nach WIFI oder nach MQTT brauche ich nicht.

Am besten nur starten der Bluetooth Übertragung und auslesen der Werte.

Den ausgelesenen Wert kann ich in ein PWM Signal wandeln. Das sollte nicht das Problem sein.

Gruß

Henrik

@henrik_79 Kannst du die Batteriespannung nicht direkt über einen Spannungsteiler auf deine SPS geben, sind doch nur 2 Wiederstände ? Und wenn ich das richtig seheh und du 0-10V brauchst die kann der ESP eh nicht ausgeben, da kommen nur 5V max. raus.

Könnt ihr mir bitte sagen welche PlugIns ihr in der Arduino IDE geladen habt damit das bei euch geht?

@stromsparer_1

Das mache ich aktuell genau so.

Jedoch ist das sehr schlecht. Die Spannung ist schnell wieder auf einem Wert der als "Voll" gerechnet wird.

Das BMS zeigt 38% an und der AkkU hat schon 49V. Damit kann ich nicht sehr viel machen.

Gruß

Henrik

@henrik_79 Moin, jetzt verstehe ich was du vorhast. Du möchtest den Akkufüllstand in Prozent an deine SPS übergeben. Leider sind meine Arduino Kenntnisse sehr gering. Vielleicht versuchst du mal im 1. Schritt die Ansprünge für Wifi und MQTT im Programm abzuhängen (mit 2 // vorweg), dann die debug_flg_full_log auf true umschalten und nachdem du kompiliert hast mal im log zu schauen ob du Daten vom JK angezeigt bekommst.

Der AKku-Stand kann anhand der Spannung nicht genau vorhergesagt werden, da die Kurve sehr Flach ist und unten und oben schnell abfällt oder ansteigt.

Der SOC wird durch das BMS berechnet. Das sind wohl komplexere Algos. Den SOC bekommt Du über Blau mitgeteilt. Hier musst Du ansetzten.

SPS hört sich schon sehr nach Industrie an. Als Firma würde ich mich nicht auf diesen Sketch verlassen. Da muss schon mehr in den Code rein.

Dies wird es dann auch nicht Gratis geben.

@unixtom

Die SPS ist eine kleine Siemens LOGO die ich als Webinterface nutze um mir diverse Daten per MODBUS TCP anzeigen zu lassen.

Um mir den Akkustand auch dort anzeigen zu lassen benötige ich diese Abfrage.

Zur Not auch eine Alternative parallel zu BMS. (für 16 Zellen)

Gruß

Henrik