Vielleicht hatte jemand von euch schon das folgende Problem, welches bei mir bei beiden Varianten des Sketch (scotty & mascheihei) nach einer gewissen Zeit auftritt:
Nach einer Weile hört der ESP32 auf Daten zu liefern. Folgendes passiert dann:
New Data for Analyse Complete...
Daten anerkannt !
New Data for Analyse Complete...
abort() was called at PC 0x401d25a7 on core 1
ELF file SHA256: 0000000000000000
Backtrace: 0x4008f648:0x3ffcd550 0x4008f8c5:0x3ffcd570 0x401d25a7:0x3ffcd590 0x401d25ee:0x3ffcd5b0 0x401d1cc3:0x3ffcd5d0 0x401d1ffe:0x3ffcd5f0 0x401d1d61:0x3ffcd610 0x400db7c3:0x3ffcd630 0x400e06f6:0x3ffcd670 0x400d4663:0x3ffcd690 0x400e2ea0:0x3ffcd700 0x4009093a:0x3ffcd720
Rebooting...
ets Jun 8 2016 00:22:57
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1420
ho 0 tail 12 room 4
load:0x40078000,len:13540
load:0x40080400,len:3604
entry 0x400805f0
BMS Publisher V 1.0
Booting
Connecting to WiFi ...Ready
IP address: 192.168.10.63
- Created client
Webserver gestartet
MQTT Client not connected
MQTT time for reconnect
MQTT reconnected!
BLE -> Reconnecting 0
BLE Advertised Device found: Name: JK-B5A25S60P, Address: c8:47:8c:f2:7c:4c, manufacturer data: 650b88a0c8478cf27c4c, serviceUUID: 0000ffe0-0000-1000-8000-00805f9b34fb, serviceUUID: 0000fee7-0000-1000-8000-00805f9b34fb
Forming a connection to c8:47:8c:f2:7c:4c
lld_pdu_get_tx_flush_nb HCI packet count mismatch (0, 1)
- Connected to server
Nach dem Fehler "lld_pdu_get_tx_flush_nb HCI packet count mismatch (0, 1)" bleibt der ESP dann in irgendeiner Endlosschleife stecken. Könnte man da vielleicht einen Watchdog einbauen? Oder kann man den Fehler irgendwie abfangen und erneut versuchen zu verbinden, bis dieser nicht mehr auftritt? Der Fehler tritt nur beim Start der Verbindung auf, ich würde sagen, jedes 2. mal oder so. Deswegen läuft es solange, bis der ESP neu starten muss, aus welchem Grund auch immer.
Hallo, ist die Version3.6 von scotty vonSeite 1 die aktuellste oder versteckt sich in den 44 Seiten noch eine neuere Version (außer der Version ohne CAN von mascheihei)?
Danke
Das sollte die neueste Version sein.
Hallo,
Danke für all die Arbeit.
In Venus OS wird alles korrekt angezeigt.
Aber wie machen wir das, wenn wir zwei Akkus haben, also 2 BMS?
Vielen Dank
Man kann mehrere BMSe (batterien) in das Venus OS bringen. Allerdings wertet Victron nur eines aus. Alternativ kann man natürlich im Treiber mehrere Batterien zusammenfassen und dann gegenüber dem Venus OS als eine Batterie auftreten. Könnte man programmieren, allerdings ist mir persönlich nicht ganz klar was man dann am Besten steuert. Ich hatte schon einmal im Forum die Frage gestellt ob einer weiß was Pylontech macht. Die steuern sicherlich auch nicht den Strom, aber leider keine Antwort bekommen. Wahrscheinlich wird es darauf hinauslaufen die max Spannungen einzelner Zellen in den verschiedenen Batterien zu überwachen
Danke für Ihre Antwort.
Ja, ich vermutete, dass wir nur eine Batterie bestellen konnten. Nur die Zellenspannung zu überwachen funktioniert für mich.
Wie ist in diesem Fall vorzugehen, um ein zweites BMS hinzuzufügen? Unterschiedlicher. Nicht identisch.
Danke für Ihre Antwort.
Ja, ich vermutete, dass wir nur eine Batterie bestellen konnten. Nur die Zellenspannung zu überwachen funktioniert für mich.
Wie ist in diesem Fall vorzugehen, um ein zweites BMS hinzuzufügen? Unterschiedlicher. Nicht identisch.
Kann man einfach starten. Sieht das install script aber jetzt nicht vor, d.h. man muss händisch eingreifen. Wenn du das machen willst kontaktier mich doch einfach über PN und dann erkläre ich es dir Schritt für Schritt.
Hi Scotty89,
Thank you very much for your work !
Your code works fine until you write out the array. Because of this, the wifi starts to disconnect, timeout, the program malfunctions, more precisely, the code is compromised. I added these lines of code and the problem was solved.
" int newlen=length;
if(newlen>numBytes){newlen=numBytes;} " //Prevents writing outside the array
The whole function changed:
static void notifyCallback(BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) {
if(pData[0] == 0x55 && pData[1] == 0xAA && pData[2] == 0xEB && pData[3] == 0x90 && pData[4] == 0x02) {
int newlen=length;
if(newlen>numBytes){newlen=numBytes;} //Prevents writing outside the array
// Serial.println("Daten anerkannt !");
received_start = true;
received_start_frame = true;
received_complete = false;
frame = 0;
for (int i = 0; i < newlen; i++) {
receivedBytes_main[frame] = pData;
frame++;
}
}
if(received_start && !received_start_frame && !received_complete) {
// Serial.println("Daten erweitert !");
int newlenadd=300-(frame+length); //Prevents writing outside the array
if(newlenadd>=0){newlenadd=length;} //Prevents writing outside the array
if(newlenadd<0){newlenadd=300-frame;} //Prevents writing outside the array
for (int i = 0; i < newlenadd; i++) {
receivedBytes_main[frame] = pData;
frame++;
}
if(frame == 300) {
//Serial.println("New Date...");
received_complete = true;
received_start = false;
new_data = true;
//Datenanalyse();
}
if((frame > 300)) {
Serial.println("Fehlerhafte Daten !!");
frame = 0;
received_start = false;
new_data = false;
}
}
//Serial.print("frame: ");
//Serial.println(frame);
received_start_frame = false;
}
//the function is clean now!
Have a nice day and thank you again for your work !
Hi Compf99,
I didn't found the definition of numBytes.
regards
Markus
hi,
Very strange, it means you don't have the code from the latest version of Scotty89, I use this BLE_client_V3.6.rar. Give me the code from the function "static void notifyCallback(BLERemoteCharacteristic* pBLERemoteCharacteristic, uint8_t* pData, size_t length, bool isNotify) {" and I'll give you a replay with the changes that need to be made !
hallo,
Ich habe seit einiger Zeit diese Voreinstellung, die Venus sagt, dass sie verbunden ist, aber die Werte werden nicht mehr angezeigt. Ich habe versucht neu zu starten, es passierte nichts.
Ich verwende die Datei von Mascheihei.
root@raspberrypi2:/data/dbus-json-bms# ./dbus-json-bms.py
2022-11-12 09:34:26,806 root INFO Start
2022-11-12 09:34:26,825 root INFO registered ourselves on D-Bus as com.victronenergy.battery.http_40
2022-11-12 09:34:26,865 root INFO Connected to dbus, and switching over to gobject.MainLoop() (= event based)
2022-11-12 09:34:30,828 root INFO Converting response to JSON failed
2022-11-12 09:34:30,830 root INFO -- bms_data return is False in _update_
2022-11-12 09:34:30,831 root INFO -- shut down BMS
2022-11-12 09:34:30,832 root INFO 1668245670.8319037
2022-11-12 09:34:37,746 root INFO Converting response to JSON failed
2022-11-12 09:34:37,748 root INFO -- bms_data return is False in _update_
2022-11-12 09:34:37,749 root INFO -- shut down BMS
2022-11-12 09:34:37,750 root INFO 1668245677.7501938
2022-11-12 09:34:38,356 root INFO Converting response to JSON failed
2022-11-12 09:34:38,358 root INFO -- bms_data return is False in _update_
2022-11-12 09:34:38,359 root INFO -- shut down BMS
2022-11-12 09:34:38,361 root INFO 1668245678.3608148
hallo,
Ich habe seit einiger Zeit diese Voreinstellung, die Venus sagt, dass sie verbunden ist, aber die Werte werden nicht mehr angezeigt. Ich habe versucht neu zu starten, es passierte nichts.
Ich verwende die Datei von Mascheihei.
Ich habe mir die Änderungen von Compf99 angeschaut. Und ich glaube das ist wahrscheinlich der Grund warum der ESP manchmal reseted und deswegen das BMS Schwierigkeiten bekommt. Deswegen habe ich es jetzt in meine Version der ESP-SW integriert. Leider bin ich unterwegs und habe dann auch kein ESP und kein JK-BMS dabei. d.h. ohne Gewähr. ES kompiliert durch und die Änderungen waren jetzt nicht so groß. Ich konnte alle nachvolziehen und die Änderungen machen Sinn. Deswegen anbei meine Version 1.1.
Also bitte mal den ESP neu flashen und mal schauen ob dann alles stabiler läuft.
Immer noch das gleiche Problem, Verbindung zu Venus, aber keine Daten.
root@raspberrypi2:/data/dbus-json-bms# ./restart.sh
root@raspberrypi2:/data/dbus-json-bms# ./dbus-json-bms.py
2022-11-12 22:39:38,179 root INFO Start
2022-11-12 22:39:38,200 root CRITICAL Error at main
Traceback (most recent call last):
File "./dbus-json-bms.py", line 430, in main
bms_output = DbusJSONBMSService(
File "./dbus-json-bms.py", line 26, in __init__
self._dbusservice = VeDbusService("{}.http_{:02d}".format(servicename, deviceinstance))
File "/opt/victronenergy/dbus-systemcalc-py/ext/velib_python/vedbus.py", line 77, in __init__
self._dbusname = dbus.service.BusName(servicename, self._dbusconn, do_not_queue=True)
File "/usr/lib/python3.8/site-packages/dbus/service.py", line 144, in __new__
raise NameExistsException(name)
dbus.exceptions.NameExistsException: Bus name already exists: com.victronenergy.battery.http_40
Exception ignored in: <function VeDbusService.__del__ at 0x759a5c40>
Traceback (most recent call last):
File "/opt/victronenergy/dbus-systemcalc-py/ext/velib_python/vedbus.py", line 93, in __del__
if self._dbusname:
AttributeError: 'VeDbusService' object has no attribute '_dbusname'
Deswegen anbei meine Version 1.1.
Also bitte mal den ESP neu flashen und mal schauen ob dann alles stabiler läuft.
JKBMS_BLE_connection.zip
Hi mascheihei,
hab die Version auch geflasht und wieder angepasst. Hab auch gesehen, dass da die Alarme miteingebaut sind.
Nachdem bei mir ja Battery_T3 bei 135+2*offset und 134+2*offset liegt, können die bei mir aber nicht passen oder?
//Battery_T3 = (((int)receivedBytes_main[135] << 8 | (int)receivedBytes_main[134])*0.1);
if(receivedBytes_main[135+2*offset] == 0xFF) {
Battery_T3 = ((0xFF << 24 | 0xFF << 16 | (int)receivedBytes_main[135+2*offset] << 8 | (int)receivedBytes_main[134+2*offset])*0.1);
}
else {
Battery_T3 = (((int)receivedBytes_main[135+2*offset] << 8 | (int)receivedBytes_main[134+2*offset])*0.1);
}
if (protocol_32 == true) { // Stimmt bei mir nicht
charge_over_temp_alarm = receivedBytes_main[135+2*offset] && 0x01;
charge_under_temp_alarm = receivedBytes_main[135+2*offset] && 0x02;
cell_under_voltage_alarm = receivedBytes_main[135+2*offset] && 0x08;
Serial.println(charge_over_temp_alarm);
Serial.println(charge_under_temp_alarm);
}
Jetzt ist meine Frage wie ich zu den korrekten Alarmen komme.
Außerdem wäre es eine Wucht, wenn du für das JK-B5A25S-60P die Battery_T3 (statt MOS_Temp) ins nächste Update aufnehmen könntest. Dann müsste ich nicht immer alles anpassen.
Hallo,
wenn ich mir die CAN Bus Botschaften die der ESP32 dem Empfänger (bei mir Venus OS mit USB-Canable Interface) zusendet anschaue, dann sehe ich das nur ca. alle 25s aktualiserte Werte (Register 0x356.. 0x35E...) gesendet werden. Das Venus OS schaltet deshalb auch immer zwichen dem Zustand BMS erkannt und kein BMS erkannt hin und her..
hier mal das Ergbenis von: candump -td any
(000.000224) can0 307 [8] 12 34 56 78 56 49 43 00
(000.441253) can0 356 [6] 2F 03 00 00 E6 00
(000.000129) can0 35E [8] 50 59 4C 4F 4E 54 45 43
(000.000126) can0 35C [2] 00 00
(000.000128) can0 351 [6] 3E 02 58 02 5E 01
(000.000118) can0 355 [4] 00 00 64 00
(000.000121) can0 359 [7] 00 00 00 00 01 50 4E
(000.557758) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000121) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000119) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000125) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000295) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000212) can0 307 [8] 12 34 56 78 56 49 43 00
(000.998762) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000233) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000028) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000228) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000031) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000457) can0 307 [8] 12 34 56 78 56 49 43 00
(001.001021) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000243) can0 307 [8] 12 34 56 78 56 49 43 00
(000.998764) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000245) can0 307 [8] 12 34 56 78 56 49 43 00
(000.998862) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000138) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000116) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000132) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000124) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000128) can0 307 [8] 12 34 56 78 56 49 43 00
(000.998867) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000119) can0 307 [8] 12 34 56 78 56 49 43 00
(001.001381) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000138) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000101) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000135) can0 307 [8] 12 34 56 78 56 49 43 00
(000.998869) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000136) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000112) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000128) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000122) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000127) can0 307 [8] 12 34 56 78 56 49 43 00
(001.001570) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000024) can0 307 [8] 12 34 56 78 56 49 43 00
(000.997569) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000223) can0 307 [8] 12 34 56 78 56 49 43 00
(001.001254) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000236) can0 307 [8] 12 34 56 78 56 49 43 00
(000.080000) can0 356 [6] 2F 03 00 00 E5 00
(000.000126) can0 35E [8] 50 59 4C 4F 4E 54 45 43
(000.000128) can0 35C [2] 00 00
(000.000124) can0 351 [6] 3E 02 58 02 5E 01
(000.000126) can0 355 [4] 00 00 64 00
(000.000118) can0 359 [7] 00 00 00 00 01 50 4E
(000.917661) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000222) can0 307 [8] 12 34 56 78 56 49 43 00
(001.000023) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000222) can0 307 [8] 12 34 56 78 56 49 43 00
(000.999999) can0 305 [8] 00 00 00 00 00 00 00 00
(000.000134) can0 307 [8] 12 34 56 78 56 49 43 00
kann mann das update intervall irgendwo einstellen?
an der "const int CAN_Cylcetime = 1000;" dürfte es wohl nicht liegen?