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.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.
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.
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 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.
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.
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.Hi mascheihei,
Also bitte mal den ESP neu flashen und mal schauen ob dann alles stabiler läuft.
JKBMS_BLE_connection.zip
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?
Mal eine kurze Frage:
Ich möchte gerne ein JK BMS an einem Solis RHI bzw. S5 EH1P4 betreiben. Der Solis benötigt das CAN Protokoll. Kann ich ihm das mit über diese Lösung hier bereitstellen? Ich steh leider noch etwas auf dem Schlauch, welche Hardware brauche ich? Kann ich den ESP32 einfach per USB programmieren, brauch dafür also gar kein Board? Danke Euch!
Hallo ton11
Schau doch mal auf die erste Seite von dieser Diskussion.
Hier findest du zwei Links zu Amazon Artikeln.
Und noch viele wichtige Hinweise wie du das System zum laufen bekommst.
Einer der beiden Artikel nennt sich ESP 32 Node MCu. Diesen kannst du direkt über ein Micro USB Kabel mit dem PC verbinden und über diesen auch programmieren und debuggen.
Falls du jedoch noch nie etwas mit arduino und esp32 gemacht hast empfehle ich dir als ersten Schritt erst einmal ein "Hello world' Programm auf den esp32 aufzuspielen.
Hallo,
ich habe das Programm ebenfalls ohne große Probleme zum laufen bekommen und nutze es um die BMS-Daten per MQTT an EVCC (Ladesteuerung für PV) weiterzugeben.
Leider wird der Parameter "Battery Power" immer positiv angegeben, egal in welche Richtung der Strom fließt.
Der Parameter "Charge Current" ändert jedoch das Vorzeichen.
Gibt es die Möglichkeit einen weiteren Parameter senden zu lassen, der für die Batterieleistung das richtige Vorzeichen mitliefert?
Das wäre für die Integration in EVCC ideal, über einen Codeschnipsel wäre ich sehr dankbar.
Grüße
Schau mal in BLE_Data_analyse.ino
Das wäre für die Integration in EVCC ideal, über einen Codeschnipsel wäre ich sehr dankbar.
Grüße
Dort werden Battery_Power und Charge_Current ausgelesen. Battery Power wird vom BMS immer positiv geliefert. Um die Leistung vorzeichenbehaftet zu bekommen kannst du einfach einfügen (nachdem Charge_current eingelesen wird)
if (Charge_Current < 0) {
Battery_Power = -Battery_Power;
}
Hi,
ich habe das Auslesen des BMS nun auch soweit umgesetzt. Ich würde nun gerne 2 weitere Werte, die ich über den ESP32 auslese mit dem json file noch mit schicken, krieg das aber nicht angepasst.
Es handelt sich um 2 Analogwerte, die ich im loop des JKBMS_BLE_connection.ino einlese. Dort wird ja auch das Data_publish aufgerufen welches unter Publish_Data.ino läuft, dort muss es vermutlich mit rein.
Nur wie?
Wer kann mir auf die Sprünge helfen, wo ich was wie einfügen muss?
Gerne auch per PN
Danke
Gruß
Flo
Melde dich mal per PN. Kann ich dir gerne einbauen
@maschelhei
ich kann die Sfotware auf meinem Raspberry Pi Zero / Venus OS leider nicht per SSH starten. Es scheint Zugriffsprobleme zu geben, aber auch wenn ich "chmod 0777 -R" auf das ganze Verzeichnis anwende funktioniert es nicht.
Kannst du weiterhelfen?
Grüße
Edit: Habe den Fehler glaube ich selbst gefunden: Stichwort absolute und relative Pfade. Ich habe alle Daten in home/daten/dbus... abgelegt und nicht in /data/dbus...
Vielen Dank Scotty, für den super Sketch. Habe es direkt zum laufen bekommen. Und es funktioniert einfach wunderbar.
Werde jetzt noch die CAN-Brücke löten, damit die Signale per Pylontech Protokoll via CAN genutzt werden können.
Für mich als Growatt SPH User ideal.
Hallo,
ich habe mir nun auch die o.a. Boards bestellt. Leider sind wohl durch das Update die Bilder mit den Einstellungen der Arduino IDE durcheinander gekommen.
Kann bitte jemand mal die Einstellungen in der IDE posten (reparieren).
Gibt es irgendwo eine Schritt für Schritt Anleitung?
Danke
Gruß Wolfgang
Moin,
tolles Forum hier, und danke Scotty für den hilfreichen Sketch. Ich habe ihn erfolgreich zum Laufen bekommen und der ESP32 sendet nun brav per MQTT an FHEM. Genau sowas habe ich gesucht ![]()
Aber wenn ich das richtig sehe, ist eine Kommunikation in die andere Richtung nicht vorgesehen. Sprich, es ist nicht möglich, das BMS über den ESP32 zu konfigurieren, richtig? Das ist schade, denn ich hatte gehofft, die Parameter des BMS eines Tages per FHEM zu ändern. Z.B. würde ich gern die Lade-/Entladeschlussspannung im Winter anders einstellen als im Sommer.
Wäre es möglich, diese Funktionen noch mit einzubauen?
@Wolfgang: Google einfach mal, wie man den ESP32 für Arduino installiert (Werkzeuge -> Board -> Boardverwalter ...) und wie man die erforderlichen Libraries installiert (Werkzeuge -> Bibliotheken verwalten ...). Die konkreten Einstellungen für das Board findest Du dann im ersten Post dieses Threads (wenn auch nicht an der richtigen Stelle, aber der Screenshot taucht irgendwo auf). So habe ich es zum Laufen bekommen.
