Benachrichtigungen
Alles löschen

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

758 Beiträge
169 Benutzer
17 Reactions
145.9 K Ansichten
(@goesen)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 15
 

@mark Hallo,

ich habe mit Version 3.6 auch nur die Zellspannungen, Hast du zwischenzeitlich eine Lösung gefunden ? Gruss


   
AntwortZitat
(@smooth)
Vorsichtiger Stromfühler
Beigetreten: Vor 5 Jahren
Beiträge: 48
 

Veröffentlicht von: @mr-moose

@Mr. Moose

Version für 18 Zellen.

 

JKBMS_BLE_connection.ino: In function 'void setup()':
JKBMS_BLE_connection.ino:283:12: error: 'initWiFi' was not declared in this scope
initWiFi();

JKBMS_BLE_connection\JKBMS_BLE_connection.ino:292:12: error: 'ota_call' was not declared in this scope
ota_call();
^
JKBMS_BLE_connection.ino:298:21: error: 'setup_can_driver' was not declared in this scope
setup_can_driver();

Compilation error: 'initWiFi' was not declared in this scope

usw........

Was könnte da der Fehler sein?

 

Diese r Beitrag wurde geändert Vor 1 Jahr von smooth

   
AntwortZitat
(@jensner)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 35
 

Veröffentlicht von: @robi_muc

@sralus

Dieses Problem hatte ich heute auch und es ist schon auf einer früheren Seite dieser Unterhaltung zu finden. So wie ich es vertanden habe sind die neuen JK BMS statt für 24 Zellen sogar für 32 Zellen ausgelegt. Dadurch erweitert sich der Speicher-Ardessbereich, und die Adresswerte "xxx" bei receivedBytes_main[xxx] müssen nach den single Zell Spannungsabfragen alle um 32!!! erhöht werden.

Ich habe das schon mal realiesiert und es wäre für viele andere hilfreich, wenn Du das komplettte Flash-File hier zur Verfügung stellst Smile

Ich habe die "alten" Zeilen alle auskommentiert und Du siehst, dass die neuen Zahlen bei receivedBytes_main alle um 32 höher sind.

Aber es sind leider immer noch nicht alle Werte richtig. So zeigt z.B. die Delta_Cell_Voltage beim Handy 0,010V und über Mqtt 0,051V. Viele andere Werte sind aber ok Smile

 

Average_Cell_Voltage = (((int)receivedBytes_main[91] << 8 | receivedBytes_main[90])*0.001);
Delta_Cell_Voltage = (((int)receivedBytes_main[93] << 8 | receivedBytes_main[92])*0.001);
//Average_Cell_Voltage = (((int)receivedBytes_main[59] << 8 | receivedBytes_main[58])*0.001);
//Delta_Cell_Voltage = (((int)receivedBytes_main[61] << 8 | receivedBytes_main[60])*0.001);
Current_Balancer = (((int)receivedBytes_main[95] << 8 | receivedBytes_main[94])*0.001);
//Current_Balancer = (((int)receivedBytes_main[63] << 8 | receivedBytes_main[62])*0.001);
// +48 byte Resistance_Cell1
// +6 byte unbekant 2
//Battery_Voltage = (((int)receivedBytes_main[121] << 24 | receivedBytes_main[120] << 16 | receivedBytes_main[119] << 8 | receivedBytes_main[118])*0.001);
Battery_Voltage = (((int)receivedBytes_main[153] << 24 | receivedBytes_main[152] << 16 | receivedBytes_main[151] << 8 | receivedBytes_main[118])*0.001);
CAN_Battery_Voltage = (((int)receivedBytes_main[151] << 8 | receivedBytes_main[150])/10);
//CAN_Battery_Voltage = (((int)receivedBytes_main[119] << 8 | receivedBytes_main[118])/10);
Battery_Power = (((int)receivedBytes_main[157] << 24 | (int)receivedBytes_main[156] << 16 | (int)receivedBytes_main[155] << 8 | (int)receivedBytes_main[122])*0.001);
//Battery_Power = (((int)receivedBytes_main[125] << 24 | (int)receivedBytes_main[124] << 16 | (int)receivedBytes_main[123] << 8 | (int)receivedBytes_main[122])*0.001);
Charge_Current = (((int)receivedBytes_main[161] << 24 | receivedBytes_main[160] << 16 | receivedBytes_main[159] << 8 | receivedBytes_main[158])*0.001);
//Charge_Current = (((int)receivedBytes_main[129] << 24 | receivedBytes_main[128] << 16 | receivedBytes_main[127] << 8 | receivedBytes_main[126])*0.001);
//CAN_Charge_Current = ((int)receivedBytes_main[129] << 24 | receivedBytes_main[128] << 16 | receivedBytes_main[127] << 8 | receivedBytes_main[126] / 100);
CAN_Charge_Current = (int)(Charge_Current * 10);
 
//Battery_Power = (((int)receivedBytes_main[121] << 8 | receivedBytes_main[120])*0.001); unbekannt ?!
//Battery_Power = (((int)receivedBytes_main[123] << 8 | receivedBytes_main[122])*0.001);
// +6 byte unbekant 3
//Battery_T1 = (((int)receivedBytes_main[131] << 8 | receivedBytes_main[130])*0.1);
//CAN_Battery_T1 = ((int)receivedBytes_main[131] << 8 | receivedBytes_main[130]);
//if(receivedBytes_main[131] == 0xFF) {
//    Battery_T1 = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[131] << 8 | (int)receivedBytes_main[130])*0.1);  
//  CAN_Battery_T1 = (0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[131] << 8 | receivedBytes_main[130]);
//}
if(receivedBytes_main[163] == 0xFF) {
  Battery_T1 = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[163] << 8 | (int)receivedBytes_main[162])*0.1);  
  CAN_Battery_T1 = (0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[163] << 8 | receivedBytes_main[162]);
}
else {
Battery_T1 = (((int)receivedBytes_main[163] << 8 | (int)receivedBytes_main[162])*0.1);  
CAN_Battery_T1 = ((int)receivedBytes_main[163] << 8 | receivedBytes_main[162]);
}
//Battery_T1 = (((int)receivedBytes_main[131] << 8 | (int)receivedBytes_main[130])*0.1);  
//CAN_Battery_T1 = ((int)receivedBytes_main[131] << 8 | receivedBytes_main[130]);
//}

 

//Battery_T2 = (((int)receivedBytes_main[133] << 8 | (int)receivedBytes_main[132])*0.1);
if(receivedBytes_main[133] == 0xFF) {
  Battery_T2 = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[165] << 8 | (int)receivedBytes_main[164])*0.1);  
}
else {
Battery_T2 = (((int)receivedBytes_main[165] << 8 | (int)receivedBytes_main[164])*0.1);  
}
//if(receivedBytes_main[133] == 0xFF) {
//  Battery_T2 = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[133] << 8 | (int)receivedBytes_main[132])*0.1);  
//}
//else {
//Battery_T2 = (((int)receivedBytes_main[133] << 8 | (int)receivedBytes_main[132])*0.1);  
//}

 

//MOS_Temp = (((int)receivedBytes_main[135] << 8 | receivedBytes_main[134])*0.1);
if(receivedBytes_main[167] == 0xFF) {
  MOS_Temp = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[167] << 8 | (int)receivedBytes_main[166])*0.1);  
}
else {
MOS_Temp = (((int)receivedBytes_main[167] << 8 | (int)receivedBytes_main[166])*0.1);  
}
//if(receivedBytes_main[135] == 0xFF) {
//  MOS_Temp = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[135] << 8 | (int)receivedBytes_main[134])*0.1);  
//}
//else {
//MOS_Temp = (((int)receivedBytes_main[135] << 8 | (int)receivedBytes_main[134])*0.1);  
//}

 

if((receivedBytes_main[171] & 0xF0) == 0x0) {
  Balance_Curr = (((int)receivedBytes_main[171] << 8 | receivedBytes_main[170])*0.001);
}
else if ((receivedBytes_main[171] & 0xF0) == 0xF0) {
  Balance_Curr = ((((int)receivedBytes_main[171] & 0x0F) << 8 | receivedBytes_main[170])*-0.001);
}
//if((receivedBytes_main[139] & 0xF0) == 0x0) {
//  Balance_Curr = (((int)receivedBytes_main[139] << 8 | receivedBytes_main[138])*0.001);
//}
//else if ((receivedBytes_main[139] & 0xF0) == 0xF0) {
//  Balance_Curr = ((((int)receivedBytes_main[139] & 0x0F) << 8 | receivedBytes_main[138])*-0.001);
//}
// +2 byte unbekant 4
Percent_Remain = ((int)receivedBytes_main[173]);
Capacity_Remain = (((int)receivedBytes_main[177] << 24 | receivedBytes_main[176] << 16 | receivedBytes_main[175] << 8 | receivedBytes_main[174])*0.001);
Nominal_Capacity = (((int)receivedBytes_main[181] << 24 | receivedBytes_main[180] << 16 | receivedBytes_main[179] << 8 | receivedBytes_main[178])*0.001);
Cycle_Count = receivedBytes_main[185] + receivedBytes_main[184] + receivedBytes_main[183] + receivedBytes_main[182];                        //((String)receivedBytes_main[153] << 24 | receivedBytes_main[152] << 16 | receivedBytes_main[151] << 8 | receivedBytes_main[150]));
// +6 byte unbekant 5
//Percent_Remain = ((int)receivedBytes_main[141]);
//Capacity_Remain = (((int)receivedBytes_main[145] << 24 | receivedBytes_main[144] << 16 | receivedBytes_main[143] << 8 | receivedBytes_main[142])*0.001);
//Nominal_Capacity = (((int)receivedBytes_main[149] << 24 | receivedBytes_main[148] << 16 | receivedBytes_main[147] << 8 | receivedBytes_main[146])*0.001);
//Cycle_Count = receivedBytes_main[153] + receivedBytes_main[152] + receivedBytes_main[151] + receivedBytes_main[150];                        //((String)receivedBytes_main[153] << 24 | receivedBytes_main[152] << 16 | receivedBytes_main[151] << 8 | receivedBytes_main[150]));
// +6 byte unbekant 5
Capacity_Cycle = (((int)receivedBytes_main[193] << 8 | receivedBytes_main[192])*0.001);
Uptime = (((int)receivedBytes_main[196] << 16 | receivedBytes_main[195] << 8 | receivedBytes_main[194]));
//Capacity_Cycle = (((int)receivedBytes_main[161] << 8 | receivedBytes_main[160])*0.001);
//Uptime = (((int)receivedBytes_main[164] << 16 | receivedBytes_main[163] << 8 | receivedBytes_main[162]));
sec = Uptime % 60;
  Uptime /= 60;
  mi = Uptime % 60;
  Uptime /= 60;
  hr = Uptime % 24;
  days = Uptime /= 24;

 

// +1 byte unbekannt
if(receivedBytes_main[198] > 0) {
//if(receivedBytes_main[166] > 0) {
  charge = "on";
}
else if (receivedBytes_main[198] == 0) {
//else if (receivedBytes_main[166] == 0) {
  charge = "off";  
}
if(receivedBytes_main[199] > 0) {
//if(receivedBytes_main[167] > 0) {
  discharge = "on";
}
else if (receivedBytes_main[199] == 0) {
//else if (receivedBytes_main[167] == 0) {
  discharge = "off";  
}

 

Zuerst schon mal vielen Dank für dieses angepasste Skript.
Damit laufen auch mein beiden JK-BMS.

Was mir noch aufgefallen ist, der Wert "Battery_Voltage" weicht irgendwie von der Anzeige in der App ab.
So erhalte folgende Werte vom jeweiligen ESP32
JK-BMS-1: 52,48V, in der App zeigt es mir jedoch 52,57V an.
JK-BMS-2: 52,48V, in der App zeigt es mir jedoch 52,62V an.

Seltsam, dass beide Werte exakt gleich sind.
By the way, die jeweiligen ESP´s verbinden sich definitiv mit den jeweiligen JK`s , denn die jeweiligen Zellspannungen der beiden BMS werden korrekt angezeigt.

Viele Grüße
Jens 

PS: die MOS_Temp bleibt auch leer.. 


   
AntwortZitat
(@jofischer)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 10
 

@robi_muc  Danke für einstellen deiner geänderten Zeilen

TOP JOB


   
AntwortZitat
(@sralus)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 13
 

@robi_muc 

Hallo

Ersteinmal Danke für deine settings !!

Hast du schon herrausgefunden warum MOS_Temp & Delta_Cell_Voltage noch nicht gehen ?

Alle anderen Werte sind so weit io. Ich lese das JK-BMS sowol über RS485 (Solaranzeige )wie auch über Bluetooth '(ESP32-MQTT-IO-Broker-Influx) über Solaranzeige Regler werden alle Daten die Solaranzeige hergibt auch gelesen. Bei meinem älteren JK-BMS gingen auch alle werte über das ESP32.... Bei meinem neuen JK-BMS mit receivedBytes_main alle um 32 erhöht sind geht wie gesagt alles bis auf MOS_Temp & Delta_Cell_Voltage.

Aus der Seite von /github.com/syssi/esphome-jk-bms wird es so berechent ... Sieht es damit anders aus als die werte die du eingetragen hast ?

Deltazellenspannung startet ab Position 60 + 16(2 Byte).

Mosfet-Temperatur ab Position  112 + 32(2 Byte).

 

// 60 2 0x00 0x00 Delta Cell Voltage 0.001 V
this->publish_state_(this->delta_cell_voltage_sensor_, (float) jk_get_16bit(60 + offset) * 0.001f);

// 112 2 0x00 0x00 Unknown112
if (frame_version == FRAME_VERSION_JK02_32S) {
this->publish_state_(this->power_tube_temperature_sensor_, (float) ((int16_t) jk_get_16bit(112 + offset)) * 0.1f);
} else {
ESP_LOGD(TAG, "Unknown112: 0x%02X 0x%02X", data[112 + offset], data[113 + offset]);
}

Beste Grüße

Sralus


   
AntwortZitat
(@jensner)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 35
 

@sralus 

Also ich dachte, die Deltazellenspannung wird ja bereits korrekt angezeigt.
Jedoch scheint diese tatsächlich ebenfalls nicht zu stimmen.
Aktuell werden 55mV (Akku 1) und 56mV (Akku 2) angezeigt.
Laut App sind es jedoch nur 2mV und 3mV Shock  
Die o.g. Werte bringen leider ebenfalls keine Änderung in Sachen Mosfed-Temperatur.
Nach wie vor 0

Was noch toll wäre, eine Info ob es Alarme gibt. 

Wenn jetzt noch die paar fehlenden Werte da wären... Wink  

Aktuell sieht das schon mal ganz ordentlich aus.
Nicht wundern, die Akkupacks werde ich vorauss. erst Ende der Woche an den WR anschließen, welcher wiederum morgen vom Elekrtiker in Betrieb genommen wird.


   
AntwortZitat
(@jensner)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 35
 

Kurzes Update.
Gemäß dieser Info habe ich jetzt schonmal die korrekte Delta_Cell_Voltage bekommen
https://github.com/syssi/esphome-jk-bms/issues/326#issuecomment-1539626228

Ich teste mal weiter.
Interessant in diesem Zusammenhang, dass wohl mal +32 und mal +16 verwendet wird.
Ich denke hierin könnte die Lösung liegen...

Gruß Jens


   
AntwortZitat
(@smooth)
Vorsichtiger Stromfühler
Beigetreten: Vor 5 Jahren
Beiträge: 48
 

Hat jemand eine Version die läuft für mehr als 16 Zellen für mich!?



   
AntwortZitat
(@sralus)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 13
 

So kann jetzt alle Werte auslesen.

Delta_Cell_Voltage = (((int)receivedBytes_main[77] << 8 | receivedBytes_main[76])*0.001);
 
if(receivedBytes_main[145] == 0xFF){
  MOS_Temp = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[15] << 8 | (int)receivedBytes_main[144])*0.1);  
}
else{
MOS_Temp = (((int)receivedBytes_main[145] << 8 | (int)receivedBytes_main[144])*0.1);  
}
Im anhang noch das ganze Arduino für JK-BMS hardware ver V11.XW - software ver V11.26 und version V4.10.1.

   
AntwortZitat
(@goesen)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 15
 

@sralus Hallo , ich habe bei mir alles mal geändert. Es funktioniert alles im iobroker...... bis auf Balance_Curr, da erscheint eine negative Zahl ca  -3,05. Ist es bei euch auch so, oder habe ich mich beim eingeben der neuen Werte  vertan ? Gruss


   
AntwortZitat
(@sralus)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 13
 

 @goesen

Balance_Curr ist doch richtig das der wert mal pos. oder neg. ist er nimmt spannung und gibt sie der zelle die weniger hat.

Balance ausgleichen der zellen div.

Gruß Sralus

 


   
bender17 reacted
AntwortZitat
(@bender17)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 3
 

test

 

 

hmmm... warum kann ich hier nichts andere posten?
Bekomme ständig eine Fehlermeldung

MalCare Firewall

Blocked because of Malicious Activities

Reference ID: 9)...

Habe schon alle Links/IPs entfernt, die mein eigentlicher Post enthalten sollte entfernt

 

 

Hi,
Erstmal vielen Dank für das Teilen dieses coolen Projekts!

Ich bin noch neu hier und hab noch nicht viel Probiert...
Seit kurzem habe ich eine AOLithium 100Ah  mit JBD BMS

Verbaut ist hier das JBD-SP04S031 V1.1
Die Frage ist erstmal ,funktioniert das mit disem BMS überhaupt?
AO Lithium liefert auch eine simple app, um ein paar Parameter auszulesen

Über die XiaoXang bzw. LLT App lassen sich die Parameter auch Ändern..

Wenn ich das Projekt auf meinen ESP32 flashe, bekomme ich keine Verbindung zum BMS.
Angepasst habe ich bisher nur die WiFi/MQTT und den BT. Muss ich hier noch die device infos bzw. den Service namen anpassen?

Der Log zeigt folgendes

manufacturer data 703e9707da8d

serviceUUID 0000ff00-0000-1000-8000-00805f9b34fb

Diese r Beitrag wurde geändert Vor 1 Jahr 3 mal von bender17

   
AntwortZitat
shiningman
(@shiningman)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 163
 

@bender17 Das wird mit diesem Projekt nicht funktionieren. Das ist nur für das JK-BMS.

Mit folgendem sollte es gehen, aber nur per RS485:
https://www.akkudoktor.net/forum/open-source-software-projekte/projektvorstellung-battery-safety-controller/

BSC auf github
Discord-Server zum BSC


   
AntwortZitat
E-Bär
(@e-baer)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 7
 

Hallo zusammne,

nachdem ich mein DALY-BMS gegen ein JK-BMS ausgetauscht habe, kommt das Projekt hier gerade recht.
Ich habe bei "meiner" Version 3.6 mal WebSerial eingebaut. Damit kommen die Meldungen auf http://ip_de_ESP/webserial an. Alternativ habe ich in meiner Sammlung auch noch ein Projekt, bei dem die seriellen Meldungen über Telnet ausgegeben werden. Dann kann man sich mit PuTTY verbinden. Aber für "einfache User" ist die Webvariante vielleicht ganz nett.

 Ich bin damit noch nicht fertig und habe es noch nicht live getestet! Also nicht zu schnell schreien...
Wer hätte Interesse an einer Version mit
[ ] WebSerial
[ ] Telnet

viele Grüße

Benrhard

Diese r Beitrag wurde geändert Vor 1 Jahr 3 mal von E-Bär

   
AntwortZitat
(@hermannf)
Vorsichtiger Stromfühler
Beigetreten: Vor 3 Jahren
Beiträge: 6
 

Veröffentlicht von: @goesen

@mark Hallo,

ich habe mit Version 3.6 auch nur die Zellspannungen, Hast du zwischenzeitlich eine Lösung gefunden ? Gruss

Würde mich auch interessieren! Oder gibt es eine ältere Version, die funktioniert? Hbe 3.4 und 3.6 getestet.

 

Diese r Beitrag wurde geändert Vor 1 Jahr von hermannf

   
AntwortZitat
Seite 43 / 51
Teilen: