Benachrichtigungen
Alles löschen

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

729 Beiträge
163 Benutzer
16 Likes
131.3 K Ansichten
(@steffenle)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

kann die fehlermeldung nicht posten...kommt immer firewall fehler


   
AntwortZitat
(@steffenle)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 5
 

dann jetzt ebend als screenshot. was mach ich falsch? warum versucht er erst gar nicht die bt verbindung aufzubauen? bezeichnung stimmt


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

Wie bekomm ich die MQTT Daten vom ESP32 in meine InfluxDB.

Habe Telegraf auf meinem Raspberry....

Hat einer die Daten aus dem ESP schon in Influx geschrieben ? Wenn ja kann mir einer dabei helfen...

 

MFG


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

@SteffenLE

Schau dir einmal den BSC an, da kannst du alles über eine Weboberfläche eisntellen und musst nichts im code ändern.
https://github.com/shining-man/bsc_fw
https://www.akkudoktor.net/forum/open-source-software-projekte/projektvorstellung-battery-safety-controller

Das JK-BMS wird im letzten Release noch nicht unterstützt, aber in der aktuellen Testversion. Die findest du auf dem BSC Discord-Channel.
https://discord.gg/bPK2HeYhEv

BSC auf github
Discord-Server zum BSC
BSC Sammelbestellung


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

 

@Scotty89

Hallo Ich kann mein JK-BMS nun per Bluetooth auslesen und die Daten per Mqtt von meinem ESP32 an den IOBroker zu meinem Raspberry senden. Dort speicher ich die Daten in meiner Influx DB. Alles gut soweit. Leider möchte ich gerne die Werte so übermittelt bekommen:

jkbms/Batterie/Spannung_Zelle_01 3.305
jkbms/Batterie/Spannung_Zelle_02 3.305
jkbms/Batterie/Spannung_Zelle_03 3.305
jkbms/Batterie/Spannung_Zelle_04 3.305
jkbms/Batterie/Spannung_Zelle_05 3.305
jkbms/Batterie/Spannung_Zelle_06 3.305
jkbms/Batterie/Spannung_Zelle_07 3.306
jkbms/Batterie/Spannung_Zelle_08 3.305
jkbms/Batterie/Spannung_Zelle_09 3.300
jkbms/Batterie/Spannung_Zelle_10 3.305
jkbms/Batterie/Spannung_Zelle_11 3.306
jkbms/Batterie/Spannung_Zelle_12 3.304
jkbms/Batterie/Spannung_Zelle_13 3.305
jkbms/Batterie/Spannung_Zelle_14 3.305
jkbms/Batterie/Spannung_Zelle_15 3.306
jkbms/Batterie/Spannung_Zelle_16 3.305
jkbms/Batterie/BatSpannung 52.881
jkbms/Service/SpannungDiff 0.004
jkbms/Service/TempBMS 23.100
jkbms/Service/Temp1 24.700
jkbms/Service/Temp2 25.000
jkbms/Batterie/BatLeistung 398.036
jkbms/Service/Charge_Current -7.527
jkbms/Service/SOC 81
jkbms/Service/Ladezyklen 33
jkbms/Service/Balance_Current 0.000
jkbms/Uptime/Sekunde 9
jkbms/Uptime/Minuten 49
jkbms/Uptime/Stunden 12
jkbms/Uptime/Tage 160
jkbms/Data/Charge on
jkbms/Data/Discharge on
jkbms/BLEconnection connected
jkbms/status online

Dafür habe ich von der BLE_client_V3.6b die Mqtt.info datei so angepasst:

String willTopic = mqttname + "/status";
#define willMessage "offline"
byte willQoS = 0;
boolean willRetain = true;


boolean reconnect(){
String topic2 = mqttname + "/BLEconnection";  
  if (client.connect(mqttname.c_str(), mqtt_username, mqtt_passwort, willTopic.c_str(), willQoS, willRetain, willMessage)) {
    // Once connected, publish an announcement...
    if(millis() < 20000) {
      client.publish(topic2.c_str(),"Startup");
    }
    topic2 = mqttname + "/parameter/debugging_aktive";
    client.subscribe(topic2.c_str());
    
    topic2 = mqttname + "/parameter/debugging_Full_Log_aktive";
    client.subscribe(topic2.c_str()); //debug_flg_full_log
    
    topic2 = mqttname + "/status";
    client.publish(topic2.c_str(),"online");
    if(debug_flg) {
      Serial.println("MQTT reconnected!");
    }
  }
  else {
   if(debug_flg) {
    Serial.println("MQTT connection failed!");
   }
  }
  return client.connected();
}



void Data_publish() {
 String cellStr;
 String topic;
 String cellVoltageBaseTopic = mqttname + "/Batterie/Spannung_Zelle_";
 for(uint8_t i=0; i<16; i++) {
   cellStr = String(cellVoltage[i],3);
   if(i<9) topic = cellVoltageBaseTopic + String("0") + String(i+1);
   else topic = cellVoltageBaseTopic + String(i+1);
   if(cellVoltage[i] != 0) {
    client.publish(topic.c_str(), cellStr.c_str());
   }
 }
 
 cellStr = String(Battery_Voltage,3);
 topic = mqttname + "/Batterie/BatSpannung";
 client.publish(topic.c_str(),cellStr.c_str());
 
 cellStr = String(Delta_Cell_Voltage,3); 
 topic = mqttname + "/Service/SpannungDiff";
 client.publish(topic.c_str(),cellStr.c_str());
 
 cellStr = String(MOS_Temp,3); 
 topic = mqttname + "/Service/TempBMS";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(Battery_T1,3); 
 topic = mqttname + "/Service/Temp1";
 client.publish(topic.c_str(),cellStr.c_str());
 
 cellStr = String(Battery_T2,3); 
 topic = mqttname + "/Service/Temp2";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(Battery_Power,3); 
 topic = mqttname + "/Batterie/BatLeistung";
 client.publish(topic.c_str(),cellStr.c_str());
 
 cellStr = String(Charge_Current,3); 
 topic = mqttname + "/Service/Charge_Current";
 client.publish(topic.c_str(),cellStr.c_str());
 
 cellStr = String(Percent_Remain); 
 topic = mqttname + "/Service/SOC";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(Cycle_Count); 
 topic = mqttname + "/Service/Ladezyklen";
 client.publish(topic.c_str(),cellStr.c_str());

// Capacity_Remain
// Nominal_Capacity
// Capacity_Cycle 

 cellStr = String(Balance_Curr,3); 
 topic = mqttname + "/Service/Balance_Current";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(sec); 
 topic = mqttname + "/Uptime/Sekunde";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(mi); 
 topic = mqttname + "/Uptime/Minuten";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(hr); 
 topic = mqttname + "/Uptime/Stunden";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(days); 
 topic = mqttname + "/Uptime/Tage";
 client.publish(topic.c_str(),cellStr.c_str());

 cellStr = String(charge);
 topic = mqttname + "/Data/Charge";
 client.publish(topic.c_str(),cellStr.c_str());
 cellStr = String(discharge);
 topic = mqttname + "/Data/Discharge";
 client.publish(topic.c_str(),cellStr.c_str());

Leider Werden die Daten immer noch so in meiner Datenbank geschrieben:

mqtt.0.BMS_Watchdog.status
mqtt.0.Data.Balance_Current
mqtt.0.Data.Battery_Power
mqtt.0.Data.Battery_T1
mqtt.0.Data.Battery_T2
mqtt.0.Data.Battery_Voltage
mqtt.0.Data.Charge
mqtt.0.Data.Charge_Current
mqtt.0.Data.Cycle_Count
mqtt.0.Data.Delta_Cell_Voltage
mqtt.0.Data.Discharge
mqtt.0.Data.MOS_Temp
mqtt.0.Data.Percent_Remain
mqtt.0.Data.Zelle_01
mqtt.0.Data.Zelle_02
mqtt.0.Data.Zelle_03
mqtt.0.Data.Zelle_04
mqtt.0.Data.Zelle_05
mqtt.0.Data.Zelle_06
mqtt.0.Data.Zelle_07
mqtt.0.Data.Zelle_08
mqtt.0.Data.Zelle_09
mqtt.0.Data.Zelle_10
mqtt.0.Data.Zelle_11
mqtt.0.Data.Zelle_12
mqtt.0.Data.Zelle_13
mqtt.0.Data.Zelle_14
mqtt.0.Data.Zelle_15
mqtt.0.Data.Zelle_16
mqtt.0.Uptime.Minuten
mqtt.0.Uptime.Sekunde
mqtt.0.Uptime.Stunden
mqtt.0.Uptime.Tage

Kann man das evtl. anpassen das ich measurements werte wie Service - Batterie usw wie oben geschrieben erhalten kann ?

Vielen Dank Vorab

Sralus


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

Hallo

Ich hoffe es ist noch alles uptodate ?

Also ich habe ein neues JKBMS bekommen B2A20S20P

in der const char* Geraetename = "JK-B2A20S20P"; musste es schonmal so geändert werden damit sich das ESP mit dem JK über bluetooth verbindet:

constchar* Geraetename = "JK_B2A20S20P"; also _ statt -.
Mein JK-BMS hat die hardware ver V11.XW - Sowtware Ver V11.26 und Version V4.10.1
Wenn ich nun eine Verbindung aufbaue werden mir nur die Zell Daten angezeigt alles andere wird nicht mehr mit daten gefüllt.
 

Habe deine 742mal die 96=11923-JKBMS_BLE_connection auf mein ESP32 geflasht.

{"Cell":{"0":3.409,"1":3.408,"2":3.407,"3":3.407,"4":3.406,"5":3.407,"6":3.408,"7":3.408,"8":3.408,"9":3.407,"10":3.407,"11":3.406,"12":3.407,"13":3.406,"14":3.407,"15":3.407},"Battery":{"Battery_Voltage":0.000,"Delta_Cell_Voltage":0.000,"MOS_Temp":0.000,"Battery_T1":0.000,"Battery_T2":0.000,"Battery_Power":0.000,"Charge_Current":0.000,"Percent_Remain":0,"Cycle_Count":455,"Balance_Current":0.000,"Uptime_Sec":27,"Uptime_Min":9,"Uptime_Hr":20,"Uptime_Day":185,"Charge":"off","Discharge":"off"}}

Über Die App auf meinem Iphone kann ich alle Daten auslesen.

wenn ich mich mit dem GPS Port verbinde werden auch alle daten ausgelesen ( nutze dafür Solaranzeige )

Hättest du eine Idee warum das jetzt so ist ?

Mqtt zeigt:

BMS_Publisher/Data/Zelle_01 3.409
BMS_Publisher/Data/Zelle_02 3.408
BMS_Publisher/Data/Zelle_03 3.407
BMS_Publisher/Data/Zelle_04 3.407
BMS_Publisher/Data/Zelle_05 3.407
BMS_Publisher/Data/Zelle_06 3.408
BMS_Publisher/Data/Zelle_07 3.407
BMS_Publisher/Data/Zelle_08 3.408
BMS_Publisher/Data/Zelle_09 3.408
BMS_Publisher/Data/Zelle_10 3.407
BMS_Publisher/Data/Zelle_11 3.407
BMS_Publisher/Data/Zelle_12 3.406
BMS_Publisher/Data/Zelle_13 3.407
BMS_Publisher/Data/Zelle_14 3.406
BMS_Publisher/Data/Zelle_15 3.406
BMS_Publisher/Data/Zelle_16 3.407
BMS_Publisher/Data/Battery_Voltage 0.000
BMS_Publisher/Data/Delta_Cell_Voltage 0.000
BMS_Publisher/Data/MOS_Temp 0.000
BMS_Publisher/Data/Battery_T1 0.000
BMS_Publisher/Data/Battery_T2 0.000
BMS_Publisher/Data/Battery_Power 0.000
BMS_Publisher/Data/Charge_Current 0.000
BMS_Publisher/Data/Percent_Remain 0
BMS_Publisher/Data/Cycle_Count 456
BMS_Publisher/Data/Balance_Current 0.000
BMS_Publisher/Uptime/Sekunde 11
BMS_Publisher/Uptime/Minuten 57
BMS_Publisher/Uptime/Stunden 1
BMS_Publisher/Uptime/Tage 185
BMS_Publisher/Data/Charge off
BMS_Publisher/Data/Discharge off
BMS_Publisher/BLEconnection connected
BMS_Publisher/status online

Vielen Dank Vorab !!

Sralus


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

@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";  
}

 


   
darcman and sralus reacted
AntwortZitat
(@jensner)
Vorsichtiger Stromfühler
Beigetreten: Vor 2 Jahren
Beiträge: 35
 

Also, irgendwie blicke ich langsam nicht mehr ganz durch. 
Nicht zuletzt auch weil die 42 Seiten mittlerweile nicht mehr zu überblicken sind.

Ich habe mich in den letzten Tagen mit Solaranzeige + ESP32 und MQTT herumgequält und mittlerweile 2 JK BMS V11.XW dazu bekommen mit dem MQTT-Server zu reden. 
Im Zuge der Versionsproblematik habe ich nun natürlich auch das Problem, dass zwar die 16 Zellen angezeigt werden, aber der Rest fehlt.

Wo finde ich denn Infos, wie das mit o.g. Script funktioniert?
Ist das jetzt für Home Assistent oder kann ich das für Solaranzeige / Graphana ebenfalls verwenden?

Viele Grüße
Jens


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

Dieses Video erklärt das Flashen des ESP32 (es ist die Erklärung für diese 42ig Seitige Diskussion :). Allerdings musst Du eben den Code wie oben beschrieben anpassen.

Wenn Du alles richtig gemacht hast, dann sendet das BMS per MQTT die Daten an Deinen MQTT Server:

// MQTT Setting
const char* mqtt_server = "192.168.178.8";     // -> 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      
String mqttname = "BMS_Watchdog";          // -> hier wird der MQTT Gerätename festgelegt
const int mqttpublishtime_offset = 5000;        //-> hier einstellen wie oft Danten gesnedet werden sollen 1000 = jede Sekunde
Bei mir ist das ein IO Broker. Aber es kann vieles sein, was MQTT versteht. So vertehe ich das zumindest Smile


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

Veröffentlicht von: @robi_muc

Dieses Video erklärt das Flashen des ESP32 (es ist die Erklärung für diese 42ig Seitige Diskussion :). Allerdings musst Du eben den Code wie oben beschrieben anpassen.

Wenn Du alles richtig gemacht hast, dann sendet das BMS per MQTT die Daten an Deinen MQTT Server:

// MQTT Setting
const char* mqtt_server = "192.168.178.8";     // -> 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      
String mqttname = "BMS_Watchdog";          // -> hier wird der MQTT Gerätename festgelegt
const int mqttpublishtime_offset = 5000;        //-> hier einstellen wie oft Danten gesnedet werden sollen 1000 = jede Sekunde
Bei mir ist das ein IO Broker. Aber es kann vieles sein, was MQTT versteht. So vertehe ich das zumindest Smile

 

Hi @robi_muc
vielen Dank für die Info.
Die reine Kommunikation hatte ich ja bereits hinbekommen.
Die Daten beider JK`s werden schön an den MQTT Server gesendet.

Jedoch konnte bis gerade eben mit der obigen Datei nichts anfangen.
Und siehe da, ich glaube ich habe sie gefunden.
In meinem Paket heißt sie "BLE_Data_analyse.ino" Eek  
Ich glaube, jetzt könnte das was werden...

Vielen Dank und viele Grüße
Jens

EDIT: Mit den o.a. Teil sieht das schon mal weitaus besser aus Wink  


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

@robi_muc 

Danke für deine Info ... habe deine Werte mal eingetragen und sie da !!

MOS_Temp 0.000 fehlt nur noch ..

jkbms/Data/Zelle_01 3.327
jkbms/Data/Zelle_02 3.327
jkbms/Data/Zelle_03 3.326
jkbms/Data/Zelle_04 3.326
jkbms/Data/Zelle_05 3.326
jkbms/Data/Zelle_06 3.327
jkbms/Data/Zelle_07 3.328
jkbms/Data/Zelle_08 3.328
jkbms/Data/Zelle_09 3.322
jkbms/Data/Zelle_10 3.328
jkbms/Data/Zelle_11 3.328
jkbms/Data/Zelle_12 3.327
jkbms/Data/Zelle_13 3.330
jkbms/Data/Zelle_14 3.328
jkbms/Data/Zelle_15 3.328
jkbms/Data/Zelle_16 3.325
jkbms/Data/Battery_Voltage 52.992
jkbms/Data/Delta_Cell_Voltage 0.051
jkbms/Data/MOS_Temp 0.000
jkbms/Data/Battery_T1 23.700
jkbms/Data/Battery_T2 23.700
jkbms/Data/Battery_Power 755.712
jkbms/Data/Charge_Current -14.202
jkbms/Data/Percent_Remain 66
jkbms/Data/Cycle_Count 1
jkbms/Data/Balance_Current 0.000
jkbms/Uptime/Sekunde 16
jkbms/Uptime/Minuten 57
jkbms/Uptime/Stunden 7
jkbms/Uptime/Tage 2
jkbms/Data/Charge on
jkbms/Data/Discharge on
jkbms/BLEconnection connected

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

Hallo,

läuft super ! Leider fehlen mir ein paar Daten !? Was muss geändert werden um meine 18 Zellen anzuzeigen und Balance on/off  ?? Habe die Version 3.6 und lass mir die Daten per Mqtt auf den Iobroker senden. Dann wäre es perfekt ....Gruß Marco

Diese r Beitrag wurde geändert Vor 12 Monaten 2 mal von smooth

   
AntwortZitat
(@mr-moose)
Vorsichtiger Stromfühler
Beigetreten: Vor 1 Jahr
Beiträge: 54
 

@smooth 

Hier mal meine Version für 18 Zellen.

 


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

Guten Morgen, nachdem ich mich nun fast durch das ganze Thema durchgearbeitet habe....und sicher etwas überlesen habe ... Mein ESP ist programmiert, funktioniert, verbindet sich sehr schnell per BT, ist im iobroker eingebunden, und wird auch  angezeigt. Nur: nicht alle Daten, Zellspannungen, Zeit , funktioniert, SOC zum Beispiel nicht.

Ich habe mir eine Experimentierboard aufgebaut, mit 8 Zellen und einem JK-b2a24s15p-C . die BT Übertragung über die App funktioniert mit allen Daten. Muss ich im Script evtl noch die Zellenanzahl ändern ? Vielen Dank

ich hoffe, es ist an der richtigen Stelle im Forum


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

Veröffentlicht von: @mr-moose

@smooth 

Hier mal meine Version für 18 Zellen.

-- attachment is not available --

 

Danke !! Werde es morgen Mal testen Cool  

 


   
AntwortZitat
Seite 42 / 49
Teilen: