shining-man / bsc_fw

Firmware battery safety controller (BSC)
MIT License
98 stars 19 forks source link

Support für JK Inverter BMS #118

Open a-wolter opened 4 months ago

a-wolter commented 4 months ago

Hallo,

ich habe das aktuelle (V0.6.0) auf einen ESP32 geflasht und soweit konfiguriert. Die JK Inverter BMS (JK-PB2A16S20P) wurden auf der Bluetoothseite erkannt und die Adresse per Copy übernommen. Gerätetyp JK-BMS [TEST] wurde für BT Device 0 und BT Device 1 ausgewählt.

Allerdings erhalte ich auch nach einem Reboot keine Daten, jedoch quittiert das BMS auch mit einem Beep die Verbindung, ich bin hier nicht sicher, ob es beide BMS gleichzeitig sind, oder nur eines, welches den Beep ausgibt.

Das Logfile sieht für mich i.O. aus. (Bluetooth Adressen wurden hier anonymisiert):

I (1970-01-01 00:00:01) LOG: Free Space total=836081, used=42168, logSize=0 I (1970-01-01 00:00:01) MAIN: BSC V0.6.0 I (1970-01-01 00:00:01) MAIN: bootCounter=1 I (1970-01-01 00:00:01) MAIN: HW: 0 I (1970-01-01 00:00:01) MAIN: Free Heap: 197056 I (1970-01-01 00:00:01) WEB_SETTINGS: Free flash entries: 560 I (1970-01-01 00:00:01) WEB_SETTINGS: Kein Parameterfile vorhanden I (1970-01-01 00:00:01) WEB_SETTINGS: writeConfig(): file not exist I (1970-01-01 00:00:07) MAIN: Free Heap: 188808 I (1970-01-01 00:00:07) MAIN: Hostname: bsc I (1970-01-01 00:00:07) MAIN: Init WLAN... I (1970-01-01 00:00:07) MAIN: Init BLE... I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=0, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=1, funktionsTyp=0 I (1970-01-01 00:00:07) MAIN: Open Wifi AP I (1970-01-01 00:00:07) Inverter: Load inverter settings(): dataSrc=0, dataSrcAdd=0 I (1970-01-01 00:00:07) Canbus: TWAI START: ESP_OK I (1970-01-01 00:00:07) I2C: Display not found (2) I (1970-01-01 00:00:07) I2C: Slave 0 (Adr=16) not found (2) I (1970-01-01 00:00:07) I2C: Slave 1 (Adr=17) not found (2) I (1970-01-01 00:00:07) I2C: Serial Ext. not found (2) I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=2, funktionsTyp=0 I (1970-01-01 00:00:07) MAIN: Free Heap: 136060 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=3, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=4, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=5, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=6, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=7, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=8, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=9, funktionsTyp=0 I (1970-01-01 00:00:07) BSC_SERIAL: initSerial SerialNr=10, funktionsTyp=0 I (1970-01-01 00:00:07) MAIN: WIFI ready (0) I (1970-01-01 00:00:07) MAIN: WIFI AP start (10) I (1970-01-01 00:00:07) MAIN: WIFI AP stop (11) I (1970-01-01 00:00:07) MAIN: WIFI AP start (10) I (1970-01-01 00:00:07) MAIN: Init BLE...ok I (1970-01-01 00:00:26) MAIN: WIFI event: 12 I (1970-01-01 00:00:28) MAIN: WIFI event: 14 I (1970-01-01 00:04:10) ALARM: Trigger 1, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 2, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 3, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 4, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 5, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 6, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 7, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 8, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 9, value 0 - I (1970-01-01 00:04:10) ALARM: Trigger 10, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 1, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 2, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 3, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 4, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 5, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 6, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 7, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 8, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 9, value 0 - I (1970-01-01 00:04:21) ALARM: Trigger 10, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 1, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 2, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 3, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 4, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 5, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 6, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 7, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 8, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 9, value 0 - I (1970-01-01 00:08:13) ALARM: Trigger 10, value 0 - I (1970-01-01 00:08:19) BLE_HANDLER: onConnect() c8:47:80:0d:xx:xx I (1970-01-01 00:08:20) BLE_HANDLER: Device connected; dev=0 I (1970-01-01 00:08:25) ALARM: Trigger 1, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 2, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 3, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 4, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 5, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 6, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 7, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 8, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 9, value 0 - I (1970-01-01 00:08:25) ALARM: Trigger 10, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 1, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 2, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 3, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 4, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 5, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 6, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 7, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 8, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 9, value 0 - I (1970-01-01 00:08:27) ALARM: Trigger 10, value 0 - I (1970-01-01 00:00:00) LOG: Free Space total=836081, used=61746, logSize=4994 I (1970-01-01 00:00:00) MAIN: BSC V0.6.0 I (1970-01-01 00:00:00) MAIN: bootCounter=1 I (1970-01-01 00:00:00) MAIN: HW: 0 I (1970-01-01 00:00:00) MAIN: Free Heap: 195768 I (1970-01-01 00:00:00) WEB_SETTINGS: Free flash entries: 199 I (1970-01-01 00:00:00) WEB_SETTINGS: Settings ok I (1970-01-01 00:00:02) MAIN: Free Heap: 188976 I (1970-01-01 00:00:02) MAIN: Hostname: bsc I (1970-01-01 00:00:02) MQTT: MQTT: ip=192.168.19.7, port=1883 I (1970-01-01 00:00:02) MAIN: Init WLAN... I (1970-01-01 00:00:02) MAIN: Init BLE... I (1970-01-01 00:00:02) MAIN: Verbindung zu NoSignal I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=0, funktionsTyp=0 I (1970-01-01 00:00:02) Inverter: Load inverter settings(): dataSrc=0, dataSrcAdd=0 I (1970-01-01 00:00:02) Canbus: TWAI START: ESP_OK I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=1, funktionsTyp=0 I (1970-01-01 00:00:02) I2C: Display not found (2) I (1970-01-01 00:00:02) I2C: Slave 0 (Adr=16) not found (2) I (1970-01-01 00:00:02) I2C: Slave 1 (Adr=17) not found (2) I (1970-01-01 00:00:02) I2C: Serial Ext. not found (2) I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=2, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=3, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=4, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=5, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=6, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=7, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=8, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=9, funktionsTyp=0 I (1970-01-01 00:00:02) BSC_SERIAL: initSerial SerialNr=10, funktionsTyp=0 I (1970-01-01 00:00:02) MAIN: Free Heap: 145252 I (1970-01-01 00:00:02) MAIN: WIFI ready (0) I (1970-01-01 00:00:03) MAIN: WIFI STA start (2) I (1970-01-01 00:00:03) MAIN: Init BLE...ok I (1970-01-01 00:00:05) MAIN: WIFI STA connected (4) I (1970-01-01 00:00:06) MAIN: WIFI STA got IP (7) I (1970-01-01 00:00:07) MAIN: IP-Adresse = 192.168.19.98 I (1970-01-01 00:00:09) TIME: Init NTP (NAME): server=pool.ntp.org I (2024-05-31 14:24:33) MAIN: Time: 2024-05-31 14:24:33 I (2024-05-31 14:24:38) BLE_HANDLER: onConnect() c8:47:80:0d:xx:xx I (2024-05-31 14:24:39) BLE_HANDLER: Device connected; dev=0 I (2024-05-31 14:24:40) BLE_HANDLER: onConnect() c8:47:80:0d:xx:xx I (2024-05-31 14:24:42) BLE_HANDLER: Device connected; dev=1 I (2024-05-31 14:24:44) MQTT: Daten von allen BMS's vorhanden. Das Senden kann starten. I (2024-05-31 14:24:46) MQTT: MQTT Broker connected I (2024-05-31 14:29:00) ALARM: Trigger 1, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 2, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 3, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 4, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 5, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 6, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 7, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 8, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 9, value 0 - I (2024-05-31 14:29:00) ALARM: Trigger 10, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 1, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 2, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 3, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 4, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 5, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 6, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 7, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 8, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 9, value 0 - I (2024-05-31 14:29:04) ALARM: Trigger 10, value 0 - I (2024-05-31 14:30:44) Inverter: Load inverter settings(): dataSrc=0, dataSrcAdd=0 I (2024-05-31 14:30:46) Inverter: Load inverter settings(): dataSrc=0, dataSrcAdd=0 I (2024-05-31 14:30:48) Inverter: Load inverter settings(): dataSrc=0, dataSrcAdd=0

Habe ich etwas übersehen? Das JK Inverter Model unterscheidet sich evtl. auch vom Protokoll, da es nicht unter den supporteten Devices gelistet ist. Kann ich hier evtl. etwas beitragen?

tanelvakker commented 3 months ago

You can use the new ones over RS485 first port. UART1 Protocol No.: 0 (4G-GPS Remote module). Normal JK-BMS in BSC settings Dip switch address needs to be 0

a-wolter commented 3 months ago

BMS.RS485.Modbus.V1.0.pdf

Translated by Deepl: BMS.RS485.Modbus.V1.0 en.pdf

Evtl hilft das, zumindest für die Kommunikation über Kabel?

shining-man commented 3 months ago

Wenn das für das JK Inverter BMS ist, dann schaut es auf den ersten Blick brauchbar aus. Vielleicht findet noch jemand ein direkt Englisches Dokument, das schöner (lesbarer) ist. Immer diese chinesischen Dokumente. Warum machen die das nicht einfach auf Englisch?

D3R-ST3FAN commented 3 months ago

Es gibt ja einen Fork vom esphome-jk-bms wo die Unterstützung für das JK Inverter BMS via RS485 und BT schon funktioniert. Ich bin jetzt nicht so der Entwickler aber das hier aus dem Fork sieht interessant aus.

shining-man commented 3 months ago

Ich bin dabei, das ganze nach dem Protokoll zu implementieren. Das ist mir immer lieber, als es irgendwo abzuschreiben. Gerade wenn es ans Fehler suchen geht, ist es einfacher. Dennoch Danke für die Infos.

MeisterQ commented 3 months ago

Ich bin dabei, das ganze nach dem Protokoll zu implementieren. Das ist mir immer lieber, als es irgendwo abzuschreiben. Gerade wenn es ans Fehler suchen geht, ist es einfacher. Dennoch Danke für die Infos.

Sehe ich das richtig, dass das BMS Modbus RTU spricht? Zumindest laut dem Übersetzen Dokument oben wird von Holding Registern und Function Codes gesprochen.

Woher nimmst du deine Infos zum Implementieren? Hast du da weitere Dokumente?

tanelvakker commented 3 months ago

@shining-man do you have new jk-bms hardware to test this on? I could send you one if needed

shining-man commented 3 months ago

@MeisterQ Im Dokument steht eigentlich alles drin. Mehr Infos brauche ich nicht.

@tanelvakker Thanks for the offer. I don't have one, but I don't rent equipment anymore. If something breaks, that's a big problem.

MeisterQ commented 3 months ago

@MeisterQ Im Dokument steht eigentlich alles drin. Mehr Infos brauche ich nicht.

@tanelvakker Thanks for the offer. I don't have one, but I don't rent equipment anymore. If something breaks, that's a big problem.

Welches Dokument genau?

shining-man commented 3 months ago

@MeisterQ Das oben angehängte: https://github.com/shining-man/bsc_fw/issues/118#issuecomment-2148244985

MeisterQ commented 3 months ago

@shining-man Ich habe mal einen Terminal Mitschnitt laufen lassen wenn man mit dem JK BMS Monitor die Livedaten abfragt:

Vom Tool wird gesendet: 0x01 0x10 0x16 0x20 0x00 0x01 0x02 0x00 0x00 0xD6 0xF1

Als Antwort kommt: 55 AA EB 90 02 05 FF 0C 01 0D 03 0D FF 0C FA 0C 04 0D 03 0D 05 0D 01 0D 06 0D 03 0D 00 0D 05 0D 03 0D 00 0D 03 0D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 02 0D 0B 00 09 04 33 00 35 00 40 00 43 00 4E 00 58 00 67 00 74 00 79 00 71 00 68 00 65 00 5B 00 45 00 41 00 35 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 CF 00 00 00 00 00 1E D0 00 00 02 E7 00 00 56 04 00 00 D4 00 D9 00 00 00 08 00 00 00 00 45 89 F0 02 00 C0 45 04 00 01 00 00 00 1B 95 04 00 64 00 00 00 7A EA 03 00 01 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF 00 01 00 00 00 9D 03 03 00 00 00 88 1F 40 40 00 00 00 00 CF 14 00 00 00 01 00 01 00 06 00 00 74 FB 0D 00 00 00 00 00 CF 00 D4 00 DA 00 9D 03 9C 80 67 08 32 00 00 00 80 51 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FE FF 7F DC 2F 01 01 B0 07 00 00 00 E6 01 10 16 20 00 01 04 4B

Nur passt das nicht zum Protokoll Blatt oben.

Vielleicht hilft das auch noch.

Hast du schon ein File online wo das Auslesen drin ist?

shining-man commented 3 months ago

@MeisterQ Danke für den Mittschnitt. Ist das das einzige Telegramm, dass die Software zum BMS sendet?

Die Antwort die zurück kommt, schaut für mich nicht nach einer Modbus Antwort aus. Kannst du mit einem Modbus Tool (z.B. Modbus Poll) einmal versuchen eine Abfrage entsprechend dem Protocoll zu machen? Das sehen wir ob eine Antwort kommt.

MeisterQ commented 3 months ago

@MeisterQ Danke für den Mittschnitt. Ist das das einzige Telegramm, dass die Software zum BMS sendet?

Die Antwort die zurück kommt, schaut für mich nicht nach einer Modbus Antwort aus. Kannst du mit einem Modbus Tool (z.B. Modbus Poll) einmal versuchen eine Abfrage entsprechend dem Protocoll zu machen? Das sehen wir ob eine Antwort kommt.

Ja das ist wenn man auf der "Livedaten" Seite vom BMS ist. Ich denke das ist das "Standard GPS Protokoll" was man am BMS für den 485 Port auswählen kann.

Für Modbus muss man Protokoll 1 (Modbus V1.0) Auswählen.

Das habe ich mal mit qmodmaster versucht auszulesen.

Das ist das Ergebnis:

grafik

Das ist ganz brauchbar. Da kommt alles zurück was auch im Protokoll Dokument steht. Man ließt ab 0x1200 123 Register aus und kann dann von 0 - 123 alle Daten abfragen.

shining-man commented 3 months ago

Hier wäre eine erste Testversion zum prinzipiellen Funktionstest: firmware_V0.6.1_T2.bin.zip

MeisterQ commented 3 months ago

Hier wäre eine erste Testversion zum prinzipiellen Funktionstest: firmware_V0.6.1_T2.bin.zip

Ich kann es leider nicht testen, da meine Hardware nicht zu den Pins vom BSC passt. Aber @a-wolter vielleicht?

shining-man commented 2 months ago

@MeisterQ Welchen Port vom JK hast du für die Kommunikation genutzt, und was hast du dazu im BMS eingestellt?

Ximerox commented 2 months ago

Hier wäre eine erste Testversion zum prinzipiellen Funktionstest: firmware_V0.6.1_T2.bin.zip

Hab die Firmware getestet. Aber nun erhalte ich gar keine Daten mehr vom BMS (JK Inverter BMS). Mir ist auch noch aufgefallen, dass die Werte für SoC beim JK Inverter BMS nicht korrekt übertragen werden. BSM zeigt 100% an und im BSC geht der SoC immer weiter runter, ohne dass sich am Ladezustand des Akkus etwas ändert.

MeisterQ commented 2 months ago

@MeisterQ Welchen Port vom JK hast du für die Kommunikation genutzt, und was hast du dazu im BMS eingestellt?

Auf dem Kommunikationsboard ganz rechts die 2 RS485 Ports sind dafür da. Zusätzlich muss das BMS auf ID 1 stehen, also der erste Dip Schalter auf Ein, ODER je nach BMS was du auslesen willst, die Modbus UID auf die Zahl stellen, worauf das BMS mit den DIP konfiguriert ist.