roccotsi2 / esp32-bluetooth-hub

Bluetooth Low Engery (BLE) data display with ESP32 to display Smart BMS and weighing data
MIT License
2 stars 0 forks source link

Get Data from BMS #1

Open db1mso opened 3 years ago

db1mso commented 3 years ago

Hallo, Gibt es eine Beschreibung, um Daten aus dem BMS zu bekommen? Ich kann mich erfolgreich mit dem BMS per Bluetooth verbinden, kann aber keine Daten auslesen. Danke. Gruß Olli

roccotsi2 commented 3 years ago

Hallo Olli,

leider habe ich keine offizielle Dokumentation finden können und daher habe ich das Datenformat analysiert (zumindest teilweise auch entschlüsselt). Leider scheint es unterschiedliche Smart BMS zu geben mit unterschiedlichem Datenformat. Ich selbst habe aktuell kein Smart BMS verfügbar, sondern ein Kollege hat eines. Er hatte mir gesagt, dass es eine passende Android App gibt. Also habe ich mir eine Simulation gebaut (siehe: https://github.com/roccotsi2/esp32-smart-bms-simulation). Dort habe ich soeben auch meine Erkenntnisse bzgl. des Datenformats dokumentiert.

Ich habe meinen Code bisher nur gegen die Simulation getestet (später werde ich es auch gegen das echte BMS testen), daher kann ich nicht versprechen, dass es funktioniert. Ich habe auch gesehen, dass die Android App an meine Simulation Daten sendet, die ich aktuell noch nicht interpretieren kann (dies kannst Du testen, indem Du meine Simulation auf einen ESP32 schreibst und dann die Andoid App gegen den ESP32 verbindest). Möglicherweise sendet das echte BMS erst Daten, nachdem man diese Datenpakete gesendet hat.

Welches Smart BMS verwendest Du genau und kannst Du Dich mit der in der Beschreibung der Simulation angegebenen Android App mit Deinem Smart BMS verbinden und bekommst Werte angezeigt?

db1mso commented 3 years ago

Hallo roccotsi2,

ich verwende das Daly Smart BMS 4S 100A. Es funktioniert unter Windows mit der Sinowealth BMS Software. Ich konnte unter folgender Adresse die Beschreibung der Protokolle finden: https://diysolarforum.com/resources/daly-smart-bms-manual-and-documentation.48/

Hier mal ein Mitschnitt der Seriellen Kommunikation:

DumpView.txt

roccotsi2 commented 3 years ago

Hallo Olli,

vielen Dank für die Dokumentation und den Mitschnitt. Bisher habe ich das echte BMS noch nicht angebunden, jedoch habe ich aus der Kommunikation mit der "Smart BMS" App einen anderen Datenverkehr ermittelt. Die Daten, die die App erwartet beginnen immer mit dem Header "D2 03". Sicher kann ich das zwar erst sagen, wenn ich in den nächsten Wochen mal das echte BMS versuche anzubinden, ich gehe allerdings davon aus, dass es so funktioniert (da die App mit meiner Simulation die korrekten Werte anzeigt). Ich werde auf jeden Fall berichten...

roccotsi2 commented 2 years ago

Hallo Olli,

ich konnte in der Zwischenzeit meinen Code gegen das echte BMS testen. Da der Test erfolgreich war, passen die von mir verwendeten Datenpakete.

Details zu den Kommandos und Datenpaketen, siehe in der Simulation: https://github.com/roccotsi2/esp32-smart-bms-simulation

m0jek commented 2 years ago

Hi roccotsi2,

I have four Sterling Power 12 volt 120ah Lithium batteries that us the Daly BMS bluetooth. I am trying to get these to work with your app, for some reason they are not connecting. Each batterie has own BMS instant. The Daly BMS android app lists each BMS and then you select which one to connect. Could be that esp32-bluetooth-hub is getting confused?

My next step is to modify your program to see if I can force it to just connect to one BMS by hardcoding its address.

Your suggestions and thoughts ?

roccotsi2 commented 2 years ago

Hi,

the code in esp32-bluetooth-hub searches for BLE devices starting with name "DL-" (see method "setup()") and having the configured UUIDs (see in main file the constants):

static BLEUUID serviceUUIDBms("0000fff0-0000-1000-8000-00805f9b34fb"); static BLEUUID charReadUUIDBms("0000fff1-0000-1000-8000-00805f9b34fb"); static BLEUUID charWriteUUIDBms("0000fff2-0000-1000-8000-00805f9b34fb");

So please check if either the name of your BMS dies not start with "DL-" or having other UUIDs. If there are multiple ones with "DL-" it should connect to the first found device. But I never tried this with more than one BMS.

If you need further assistence, feel free to ask. :-)