All this talk about smartbms… If you guys have a raspberry pi, I have some python that can fetch cell voltages (among other things) from all smartbms in the area. I got very tired of using the phone app to check. Example output:
pi@raspberrypi:~/btle/scripts $ sudo ./scan.py
a4:c1:38:2a:b0:fa a4:c1:38:d4:a3:b2
pi@raspberrypi:~/btle/scripts $ ./querybmss.py $(sudo ./scan.py )
mac: a4:c1:38:2a:b0:fa
basic_info(start_bit=221, flag=3, state=0, length=27, total_voltage=4937, current=0, remaining_capacity=445, nominal_capacity=460, number_of_cycles=0, production_date=9858, balance_state_1_16=0, balance_state_17_32=0, protection_status=0, software_version=32, remaining_percent=97, mosfet_charge_state=3, number_of_battery_strings=15, temp_sensor_number=2, sensors_content_1=2921, sensors_content_2=2921, checksum=64473, end=119)
battery_strings: 15
voltage: 49.37 (avg 3.291 per cell)
cell 1: v:0cde, vi: 3294, volts: 3.294
cell 2: v:0cdd, vi: 3293, volts: 3.293
cell 3: v:0cdb, vi: 3291, volts: 3.291
cell 4: v:0cdc, vi: 3292, volts: 3.292
cell 5: v:0cde, vi: 3294, volts: 3.294
cell 6: v:0cdb, vi: 3291, volts: 3.291
cell 7: v:0cdb, vi: 3291, volts: 3.291
cell 8: v:0cdf, vi: 3295, volts: 3.295
cell 9: v:0cd6, vi: 3286, volts: 3.286
cell 10: v:0cd8, vi: 3288, volts: 3.288
cell 11: v:0cdb, vi: 3291, volts: 3.291
cell 12: v:0cde, vi: 3294, volts: 3.294
cell 13: v:0cdc, vi: 3292, volts: 3.292
cell 14: v:0cda, vi: 3290, volts: 3.29
cell 15: v:0cdc, vi: 3292, volts: 3.292
total: 49.374 avg: 3.292 min: 3.286 max: 3.295 diff: 0.009
======================
mac: a4:c1:38:d4:a3:b2
basic_info(start_bit=221, flag=3, state=0, length=27, total_voltage=3950, current=0, remaining_capacity=1069, nominal_capacity=2760, number_of_cycles=0, production_date=9265, balance_state_1_16=0, balance_state_17_32=0, protection_status=0, software_version=25, remaining_percent=39, mosfet_charge_state=3, number_of_battery_strings=12, temp_sensor_number=2, sensors_content_1=2931, sensors_content_2=2930, checksum=64708, end=119)
battery_strings: 12
voltage: 39.5 (avg 3.292 per cell)
cell 1: v:0cd8, vi: 3288, volts: 3.288
cell 2: v:0cdb, vi: 3291, volts: 3.291
cell 3: v:0cdb, vi: 3291, volts: 3.291
cell 4: v:0cdc, vi: 3292, volts: 3.292
cell 5: v:0cda, vi: 3290, volts: 3.29
cell 6: v:0cde, vi: 3294, volts: 3.294
cell 7: v:0cdd, vi: 3293, volts: 3.293
cell 8: v:0cdb, vi: 3291, volts: 3.291
cell 9: v:0cde, vi: 3294, volts: 3.294
cell 10: v:0cdd, vi: 3293, volts: 3.293
cell 11: v:0cdc, vi: 3292, volts: 3.292
cell 12: v:0cd9, vi: 3289, volts: 3.289
total: 39.498 avg: 3.292 min: 3.288 max: 3.294 diff: 0.006
======================
Next step for me is pushing the data into some time series database (influx/graphite/prometheus + grafana), then some alerting if any pack goes below threshold. The smartbms do have some passive drain.
The time series database would also allow alerting for out of balance
It shouldn’t be too much more work to also remotely activate/deactivate active balancing.
(I think this is really cool lol)