@mark Hallo,
ich habe mit Version 3.6 auch nur die Zellspannungen, Hast du zwischenzeitlich eine Lösung gefunden ? Gruss
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?
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
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
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 4Percent_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 5Capacity_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 unbekanntif(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..
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
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
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...
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.
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
Hat jemand eine Version die läuft für mehr als 16 Zellen für mich!?
So kann jetzt alle Werte auslesen.
@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
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
@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/
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
@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.