From a1147afcf2f806b265502f0e38d9513f7f8fcff0 Mon Sep 17 00:00:00 2001 From: Martin Polehla Date: Fri, 15 Mar 2024 20:58:08 +0100 Subject: [PATCH] Fixing JK BMS black version. Adding JKBMS_CAN_CELL_COUNT to predefine number of cells. Fixing CAN reinstallation process. --- etc/dbus-serialbattery/bms/jkbms_can.py | 22 +++++++++++++--------- etc/dbus-serialbattery/config.default.ini | 4 ++++ etc/dbus-serialbattery/dbushelper.py | 6 ++++++ etc/dbus-serialbattery/reinstall-local.sh | 11 +++++------ etc/dbus-serialbattery/utils.py | 4 ++++ 5 files changed, 32 insertions(+), 15 deletions(-) diff --git a/etc/dbus-serialbattery/bms/jkbms_can.py b/etc/dbus-serialbattery/bms/jkbms_can.py index 7a9f7da7..8326e1b9 100644 --- a/etc/dbus-serialbattery/bms/jkbms_can.py +++ b/etc/dbus-serialbattery/bms/jkbms_can.py @@ -8,6 +8,7 @@ MAX_BATTERY_DISCHARGE_CURRENT, MAX_CELL_VOLTAGE, MIN_CELL_VOLTAGE, + JKBMS_CAN_CELL_COUNT, zero_char, ) from struct import unpack_from @@ -49,12 +50,14 @@ def __del__(self): MESSAGES_TO_READ = 100 - # Changed from 0x0XF4 to 0x0XF5. See https://github.com/Louisvdw/dbus-serialbattery/issues/950 + # B2A... Black is using 0x0XF4 + # B2A... Silver is using 0x0XF5 + # See https://github.com/Louisvdw/dbus-serialbattery/issues/950 CAN_FRAMES = { - BATT_STAT: 0x02F5, - CELL_VOLT: 0x04F5, - CELL_TEMP: 0x05F5, - ALM_INFO: 0x07F5, + BATT_STAT: [0x02F4,0x02F5], + CELL_VOLT: [0x04F4,0x04F5], + CELL_TEMP: [0x05F4,0x05F5], + ALM_INFO: [0x07F4,0x07F5] } def test_connection(self): @@ -67,6 +70,7 @@ def get_settings(self): # After successful connection get_settings will be call to set up the battery. # Set the current limits, populate cell count, etc # Return True if success, False for failure + self.cell_count = JKBMS_CAN_CELL_COUNT self.max_battery_charge_current = MAX_BATTERY_CHARGE_CURRENT self.max_battery_discharge_current = MAX_BATTERY_DISCHARGE_CURRENT self.max_battery_voltage = MAX_CELL_VOLTAGE * self.cell_count @@ -204,7 +208,7 @@ def read_serial_data_jkbms_CAN(self): # print("message received") messages_to_read -= 1 # print(messages_to_read) - if msg.arbitration_id == self.CAN_FRAMES[self.BATT_STAT]: + if msg.arbitration_id in self.CAN_FRAMES[self.BATT_STAT]: voltage = unpack_from(" /dev/null 2>&1; then + echo "Killing old BLE battery services..." svc -t /service/dbus-blebattery.* # always remove existing blebattery services to cleanup @@ -386,7 +387,8 @@ can_lenght=${#can_array[@]} # echo $can_lenght # stop all dbus-canbattery services, if at least one exists -if [ -d "/service/dbus-canbattery.0" ]; then +if ls /service/dbus-canbattery.* 1> /dev/null 2>&1; then + echo "Killing old CAN battery services..." svc -t /service/dbus-canbattery.* # always remove existing canbattery services to cleanup @@ -395,10 +397,7 @@ if [ -d "/service/dbus-canbattery.0" ]; then # kill all canbattery processes that remain pkill -f "supervise dbus-canbattery.*" pkill -f "multilog .* /var/log/dbus-canbattery.*" - pkill -f "python .*/dbus-serialbattery.py .*_Ble" - - # kill opened bluetoothctl processes - pkill -f "^bluetoothctl " + pkill -f "python .*/dbus-serialbattery.py can.*" fi diff --git a/etc/dbus-serialbattery/utils.py b/etc/dbus-serialbattery/utils.py index 4539d41e..92be67ef 100644 --- a/etc/dbus-serialbattery/utils.py +++ b/etc/dbus-serialbattery/utils.py @@ -53,6 +53,7 @@ def _get_list_from_config( # save config values to constants + # --------- Battery Current limits --------- MAX_BATTERY_CHARGE_CURRENT = float(config["DEFAULT"]["MAX_BATTERY_CHARGE_CURRENT"]) MAX_BATTERY_DISCHARGE_CURRENT = float( @@ -250,6 +251,9 @@ def _get_list_from_config( BATTERY_CAPACITY = float(config["DEFAULT"]["BATTERY_CAPACITY"]) INVERT_CURRENT_MEASUREMENT = int(config["DEFAULT"]["INVERT_CURRENT_MEASUREMENT"]) +# -- JK BMS settings +JKBMS_CAN_CELL_COUNT = int(config["DEFAULT"]["JKBMS_CAN_CELL_COUNT"]) + # -- ESC GreenMeter and Lipro device settings GREENMETER_ADDRESS = int(config["DEFAULT"]["GREENMETER_ADDRESS"]) LIPRO_START_ADDRESS = int(config["DEFAULT"]["LIPRO_START_ADDRESS"])