Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SOC reset, cells voltage, balanced cells #29

Closed
Honusnap opened this issue Apr 22, 2024 · 18 comments
Closed

SOC reset, cells voltage, balanced cells #29

Honusnap opened this issue Apr 22, 2024 · 18 comments
Labels
invalid This doesn't seem right

Comments

@Honusnap
Copy link

Describe the bug

Hello All,

This is not per say a bug, maybe i'm doing something wrong.

My cells are well balanced and i do not charge them all the way up, i keep at 54.65V Bulk and 54.4 Float.
Problem is that the condition where SOC_RESET_VOLTAGE has to be higher then MAX_CELL_VOLTAGE do not work that well in those situation where there is near no deviation between cells... they all at the same voltage withtin 0.008V (at 54.6V total).
Which mean .. i'm kind locked between having a "High voltage" alarm .. ot not meeting the conditions on the SOC_RESET.

Why would there be a condition on the SOC_RESET_VOLTAGE ? I want to be able to use a value lower then MAX_CELL_VOLTAGE.

Alarm high voltage when > MAX_CELL_VOLTAGEx16
=> No room here when there is not deviation.
3.416 : SOC_RESET_VOLTAGE
3.415 ; MAX_CELL_VOLTAGE

Charge is not let to the BMS in my system, charge controller is doing the job, Chargers are set to 54.65V
CVCM_ENABLE = False, is disabled :

How to reproduce

Charge pack up to 54.65V => SOC reset do not happend.

Expected behavior

Reset SOC at the desired voltage.

Driver version

v1.0.202404

Venus OS device type

Cerbo GX

Venus OS version

3.30

BMS type

JKBMS / Heltec BMS

Cell count

16

Battery count

1

Connection type

Bluetooth

Config file

[DEFAULT]

; --------- Set logging level ---------
; ERROR: Only errors are logged
; WARNING: Errors and warnings are logged
; INFO: Errors, warnings and info messages are logged
; DEBUG: Errors, warnings, info and debug messages are logged
LOGGING = INFO

; --------- Battery Current limits ---------
MAX_BATTERY_CHARGE_CURRENT    = 120.0
MAX_BATTERY_DISCHARGE_CURRENT = 150.0

; --------- Cell Voltages ---------
; Description:
; Cell min/max voltages which are used to calculate the min/max battery voltage
; Example: 16 cells * 3.45V/cell = 55.2V max charge voltage. 16 cells * 2.90V = 46.4V min discharge voltage
MIN_CELL_VOLTAGE   = 2.900
; Max voltage (can seen as absorption voltage) : 3.450
MAX_CELL_VOLTAGE   = 3.415
; Float voltage (can be seen as resting voltage) : 3.375
FLOAT_CELL_VOLTAGE = 3.400

; --------- SOC reset voltage ---------
; Description:
;     May be needed to reset the SoC to 100% once in a while for some BMS, because of SoC drift.
;     Specify the cell voltage where the SoC should be reset to 100% by the BMS.
;       - JKBMS: SoC is reset to 100% if one cell reaches OVP (over voltage protection) voltage
;     As you have to adopt this value to your system, I reccomend to start with
;     OVP voltage - 0.030 (see Example).
;       - Try to increase (add) by 0.005 in steps, if the system does not switch to float mode, even if
;         the target voltage SOC_RESET_VOLTAGE * CELL_COUNT is reached.
;       - Try to decrease (lower) by 0.005 in steps, if the system hits the OVP too fast, before all
;         cells could be balanced and the system goes into protection mode multiple times.
; Example:
;     If OVP is 3.650, then start with 3.620 and increase/decrease by 0.005
; Note:
;     The value has to be higher as the MAX_CELL_VOLTAGE : 3.650
SOC_RESET_VOLTAGE = 3.416
; Specify after how many days the soc reset voltage should be reached again
; The timer is reset when the soc reset voltage is reached
; Leave empty if you don't want to use this
; Example:
;     Value is set to 15
;     day 1: soc reset reached once
;     day 16: soc reset reached twice
;     day 31: soc reset not reached since it's very cloudy
;     day 34: soc reset reached since the sun came out
;     day 49: soc reset reached again, since last time it took 3 days to reach soc reset voltage
SOC_RESET_AFTER_DAYS =

; --------- Bluetooth BMS ---------
; Description:
;     Specify the Bluetooth BMS and it's MAC address that you want to install. Leave emty to disable
; Available Bluetooth BMS: Jkbms_Ble, LltJbd_Ble
; Example for one BMS: BLUETOOTH_BMS = Jkbms_Ble C8:47:8C:00:00:00
; Example for multiple BMS: BLUETOOTH_BMS = Jkbms_Ble C8:47:8C:00:00:00, Jkbms_Ble C8:47:8C:00:00:11, Jkbms_Ble C8:47:8C:00:00:22
; BLUETOOTH_BMS = Jkbms_Ble 3C:A5:50:81:D7:C6 BMS 150A 1A
BLUETOOTH_BMS = Jkbms_Ble C8:47:8C:E9:0C:E6

; --------- Bluetooth use USB ---------
; Description:  Some users reported issues to the built in bluetooth module, you can try to fix it with an USB
;     module. After a change you have to run reinstall-local.sh and to manual reboot the device!
;     The usb bluetooth module must have BLE support (bluetooth version >= 4.0)
;     Other bluetooth devices such as Ruuvi tags not tested yet.
; False: Use the built in bluetooth module
; True: Disable built in bluetooth module and try to use USB module
BLUETOOTH_USE_USB = False

; --------- CAN BMS ---------
; Description:
;     Specify the CAN port(s) where the BMS is connected to. Leave empty to disable
; Available CAN BMS: Daly_Can, Jkbms_Can
; Example for one CAN port: CAN_PORT = can0
; Example for multiple CAN ports: CAN_PORT = can0, can8, can9
CAN_PORT =

; --------- BMS disconnect behaviour ---------
; Description:
;     Block charge and discharge when the communication to the BMS is lost. If you are removing the
;     BMS on purpose, then you have to restart the driver/system to reset the block.
; False:
;     Charge and discharge is not blocked on BMS communication loss for 20 minutes, if cell voltages are between
;     3.25 V and 3.35 V. Else the driver block charge and discharge after 60 seconds.
; True:
;     Charge and discharge is blocked on BMS communication loss, it's unblocked when connection is established
;     again or the driver/system is restarted. This is the Victron Energy default behaviour.
BLOCK_ON_DISCONNECT = False

; --------- Charge mode ---------
; Choose the mode for voltage / current limitations (True / False)
; False is a step mode: This is the default with limitations on hard boundary steps
; True is a linear mode:
;     For CCL and DCL the values between the steps are calculated for smoother values (by WaldemarFech)
;     For CVL max battery voltage is calculated dynamically in order that the max cell voltage is not exceeded
LINEAR_LIMITATION_ENABLE = True

; Specify in seconds how often the linear values should be recalculated
LINEAR_RECALCULATION_EVERY = 60
; Specify in percent when the linear values should be recalculated immediately
; Example: 5 for a immediate change, when the value changes by more than 5%
LINEAR_RECALCULATION_ON_PERC_CHANGE = 5


; --------- Externcal current sensor ---------
; Specify the dbus device and path where the external current sensor is connected to
; You can find it by executing the dbus-spy command
; Example for a external current sensor connected to the VE.Bus port:
;     EXTERNAL_CURRENT_SENSOR_DBUS_DEVICE = "com.victronenergy.vebus.ttyS3"
;     EXTERNAL_CURRENT_SENSOR_DBUS_PATH = "/Dc/0/Current"
EXTERNAL_CURRENT_SENSOR_DBUS_DEVICE =
EXTERNAL_CURRENT_SENSOR_DBUS_PATH =


; --------- Charge Voltage limitation (affecting CVL) ---------
; Description:
;     Limit max charging voltage (MAX_CELL_VOLTAGE * cell count), switch from max voltage to float
;     voltage (FLOAT_CELL_VOLTAGE * cell count) and back
;     False: Max charging voltage is always kept
;     True: Max charging voltage is reduced based on charge mode
;         Step mode: After max voltage is reached for MAX_VOLTAGE_TIME_SEC it switches to float voltage. After
;             SoC is below SOC_LEVEL_TO_RESET_VOLTAGE_LIMIT it switches back to max voltage.
;         Linear mode: After max voltage is reachend and cell voltage difference is smaller or equal to
;             CELL_VOLTAGE_DIFF_KEEP_MAX_VOLTAGE_UNTIL it switches to float voltage after MAX_VOLTAGE_TIME_SEC
;             additional seconds.
;             After cell voltage difference is greater or equal to CELL_VOLTAGE_DIFF_TO_RESET_VOLTAGE_LIMIT
;             OR
;             SoC is below SOC_LEVEL_TO_RESET_VOLTAGE_LIMIT
;             it switches back to max voltage.
; Example when set to True:
;     Step mode:
;          The battery reached max voltage of 55.2V and hold it for 900 seconds, the the CVL is switched to
;          float voltage of 53.6V to don't stress the batteries. Allow max voltage of 55.2V again, if SoC is
;          once below 80%
;     Linear mode:
;          The battery reached max voltage of 55.2V and the max cell difference is 0.010V, then switch to float
;          voltage of 53.6V after 900 additional seconds to don't stress the batteries. Allow max voltage of
;          55.2V again if max cell difference is above 0.080V or SoC below 80%.
; Charge voltage control management enable (True/False).
CVCM_ENABLE = True

; -- CVL reset based on cell voltage diff (linear mode)
; Specify cell voltage diff where CVL limit is kept until diff is equal or lower
CELL_VOLTAGE_DIFF_KEEP_MAX_VOLTAGE_UNTIL        = 0.010
; Specify cell voltage diff where MAX_VOLTAGE_TIME_SEC restarts if diff is bigger
CELL_VOLTAGE_DIFF_KEEP_MAX_VOLTAGE_TIME_RESTART = 0.013
; Specify cell voltage diff where CVL limit is reset to max voltage, if value get above
; the cells are considered as imbalanced, if the cell diff exceeds 5% of the nominal cell voltage
; e.g. 3.2 V * 5 / 100 = 0.160 V
CELL_VOLTAGE_DIFF_TO_RESET_VOLTAGE_LIMIT        = 0.080

; -- CVL reset based on SoC option (step mode & linear mode)
; Specify how long the max voltage should be kept
;     Step mode: If reached then switch to float voltage
;     Linear mode: If cells are balanced keep max voltage for further MAX_VOLTAGE_TIME_SEC seconds
MAX_VOLTAGE_TIME_SEC = 900
; Specify SoC where CVL limit is reset to max voltage
;     Step mode: If SoC gets below
;     Linear mode: If cells are unbalanced or if SoC gets below
SOC_LEVEL_TO_RESET_VOLTAGE_LIMIT = 90


; --------- SOC calculation ---------
; Description:
;     Calculate the SOC in the driver. Do not use the SOC reported by the BMS
; SOC_CALCULATION:
;     True: Calc SOC in the driver, do not use SOC reported from BMS
;         - The SOC is calculated by integration of the current reported by the BMS
;         - The current reported from the BMS can be corrected by
;           the map (SOC_CALC_CURRENT_REPORTED_BY_BMS, SOC_CALC_CURRENT_MEASURED_BY_USER)
;         - The SOC is set to 100% if the following conditions apply for at least SOC_RESET_TIME seconds:
;             * Current is lower than SOC_RESET_CURRENT amps
;             * Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP
;         - The calculated SOC is stored in dbus to persist a driver restart
;     False: Use SOC reported from BMS (none of the other parameters apply)
; More info: https://github.com/Louisvdw/dbus-serialbattery/pull/868
SOC_CALCULATION   = True
SOC_RESET_CURRENT = 5
SOC_RESET_TIME    = 30
SOC_CALC_CURRENT_REPORTED_BY_BMS = -200, -100, -50, -25, -10, -5.9, -5, -3.4, -3.0, -2.4, -2.2, -1.4, -0.5, 0, 0.5, 1, 1.8, 2.2, 2.6, 2.8, 3, 3.35, 3.8, 4, 4.5, 5, 5.5, 10, 25, 50, 100, 200
SOC_CALC_CURRENT_MEASURED_BY_USER = -200, -100, -50, -25, -10, -6.2, -5, -3.2, -2.70, -2.2, -2.1, -1, 0, 0, 0, 0.5, 1, 1.5, 2, 2.3, 2.55, 3, 3.55, 3.8, 4.35, 4.9, 5.5, 10, 25, 50, 100, 200
; Example to set small currents to zero
;     SOC_CALC_CURRENT_REPORTED_BY_BMS  = -300, -0.5, 0.5, 300
;     SOC_CALC_CURRENT_MEASURED_BY_USER = -300,    0,   0, 300


; --------- Cell Voltage Current limitation (affecting CCL/DCL) ---------
; Description: Maximal charge / discharge current will be in-/decreased depending on min and max cell voltages
; Example:
;     18 cells * 3.55V/cell = 63.9V max charge voltage
;     18 cells * 2.70V/cell = 48.6V min discharge voltage
;     But in reality not all cells reach the same voltage at the same time. The (dis)charge current
;     will be (in-/)decreased, if even ONE SINGLE BATTERY CELL reaches the limits

; Charge current control management referring to cell-voltage enable (True/False).
CCCM_CV_ENABLE = True
; Discharge current control management referring to cell-voltage enable (True/False).
DCCM_CV_ENABLE = True

; Set steps to reduce battery current
; The current will be changed linear between those steps if LINEAR_LIMITATION_ENABLE is set to True
CELL_VOLTAGES_WHILE_CHARGING   = 3.50, 3.41, 3.40, 3.35, 3.30
MAX_CHARGE_CURRENT_CV_FRACTION = 0.05, 0.10, 0.50, 0.75,    1

CELL_VOLTAGES_WHILE_DISCHARGING   = 2.90, 3.00, 3.20, 3.30
MAX_DISCHARGE_CURRENT_CV_FRACTION =    0,  0.1,  0.5,    1

; --------- Cell Voltage limitation (affecting CVL) ---------
; This function prevents a bad balanced battery to overcharge the cell with the highest voltage and the bms to
; switch off because of overvoltage of this cell.
;
; Example:
;     15 cells are at 3.4v, 1 cell is at 3.6v. Total voltage of battery is 54.6v and the Victron System sees no reason to
;     lower the charging current as the control_voltage (Absorbtion Voltage) ist 55.2v
;     In this case the Cell Voltage limitation kicks in and lowers the control_voltage to keep it close to the MAX_CELL_VOLTAGE.
;
; In theory this can also be done with CCL, but doing it with CVL has 2 advantages:
;     - In a well balanced system the current can be kept quite high till the end of charge by using MAX_CELL_VOLTAGE for charging.
;     - In systems with MPPTs and DC-feed-in activated the victron systems do not respect CCL, so CVL is the only way to prevent the
;       highest cell in a bad balanced system from overcharging.
;
; There are 2 methods implemented to calculate CVL:
;   1. penalty_sum-Method (CVL_ICONTROLLER_MODE = False)
;      The voltage-overshoot of all cells that exceed MAX_CELL_VOLTAGE is summed up and the control voltage is lowered by this "penalty_sum".
;      This is calculated every LINEAR_RECALCULATION_EVERY seconds.
;      In fact, this is a P-Controller.
;   2. I-Controller (CVL_ICONTROLLER_MODE = True)
;      An I-Controller tries to control the voltage of the highest cell to MAX_CELL_VOLTAGE + CELL_VOLTAGE_DIFF_KEEP_MAX_VOLTAGE_UNTIL.
;      (for example 3.45V+0.01V =3.46V). If the voltage of the highest cell is above this level, CVL is reduced. If the voltage is below, CVL is
;      increased until cellcount*MAX_CELL_VOLTAGE.
;      An I-Part of 0.2 V/Vs (CVL_ICONTROLLER_FACTOR) has proved to be a stable and fast controlling-behaviour.
;      This method is not as fast as the penalty_sum-Method but usually smoother and more stable against toggeling and has no stationary deviation.
; More info: https://github.com/Louisvdw/dbus-serialbattery/pull/882
CVL_ICONTROLLER_MODE   = False
CVL_ICONTROLLER_FACTOR = 0.2


; --------- Temperature limitation (affecting CCL/DCL) ---------
; Description:
;     Maximal charge / discharge current will be in-/decreased depending on temperature
; Example:
;     The temperature limit will be monitored to control the currents. If there are two temperature senors,
;     then the worst case will be calculated and the more secure lower current will be set.
; Charge current control management referring to temperature enable (True/False).
CCCM_T_ENABLE = True
; Charge current control management referring to temperature enable (True/False).
DCCM_T_ENABLE = True

; Set steps to reduce battery current
; The current will be changed linear between those steps if LINEAR_LIMITATION_ENABLE is set to True
TEMPERATURES_WHILE_CHARGING      = 0,   2,   5,  10,  15, 20, 35,  40, 55
MAX_CHARGE_CURRENT_T_FRACTION    = 0, 0.1, 0.2, 0.4, 0.8,  1,  1, 0.4,  0

TEMPERATURES_WHILE_DISCHARGING   = -20,   0,   5,  10, 15, 45, 55
MAX_DISCHARGE_CURRENT_T_FRACTION =   0, 0.2, 0.3, 0.4,  1,  1,  0


; --------- SOC limitation (affecting CCL/DCL) ---------
; Description:
;     Maximal charge / discharge current will be increased / decreased depending on State of Charge,
;     see CC_SOC_LIMIT1 etc.
; Example:
;     The SoC limit will be monitored to control the currents.
; Charge current control management enable (True/False).
CCCM_SOC_ENABLE = False
; Discharge current control management enable (True/False).
DCCM_SOC_ENABLE = False

; Set steps to reduce battery current
; The current will be changed linear between those steps if LINEAR_LIMITATION_ENABLE is set to True
SOC_WHILE_CHARGING                 =  100,   95,   90,   85
MAX_CHARGE_CURRENT_SOC_FRACTION    = 0.00, 0.15, 0.50, 1.00

SOC_WHILE_DISCHARGING              =    0,    5,   10,   15,   20
MAX_DISCHARGE_CURRENT_SOC_FRACTION = 0.00, 0.10, 0.20, 0.50, 1.00


; --------- Time-To-Go ---------
; Description:
;     Calculates the time to go shown in the GUI
;     Recalculation is done based on TIME_TO_SOC_RECALCULATE_EVERY
TIME_TO_GO_ENABLE = True


; --------- Time-To-Soc ---------
; Description:
;     Calculates the time to a specific SoC
; Example:
;     TIME_TO_SOC_POINTS = 50, 25, 15, 0
;     6h 24m remaining until 50% SoC
;     17h 36m remaining until 25% SoC
;     22h 5m remaining until 15% SoC
;     28h 48m remaining until 0% SoC
; Set of SoC percentages to report on dbus and MQTT. The more you specify the more it will impact system performance.
; [Valid values 0-100, comma separated list. More that 20 intervals are not recommended]
; Example: TIME_TO_SOC_POINTS = 100, 95, 90, 85, 75, 50, 25, 20, 10, 0
; Leave empty to disable
TIME_TO_SOC_POINTS =
; Specify TimeToSoc value type [Valid values 1, 2, 3]
; 1 Seconds
; 2 Time string <days>d <hours>h <minutes>m <seconds>s
; 3 Both seconds and time string "<seconds> [<days>d <hours>h <minutes>m <seconds>s]"
TIME_TO_SOC_VALUE_TYPE = 2
; Specify in seconds how often the TimeToSoc should be recalculated
; Minimum are 5 seconds to prevent CPU overload
TIME_TO_SOC_RECALCULATE_EVERY = 60
; Include TimeToSoC points when moving away from the SoC point [Valid values True, False]
; These will be as negative time. Disabling this improves performance slightly
TIME_TO_SOC_INC_FROM = False


; --------- Additional settings ---------
; Specify one or more BMS types to load else leave empty to try to load all available
; Available BMS:
;     Daly, Ecs, HeltecModbus, HLPdataBMS4S, Jkbms, Lifepower, LltJbd, Renogy, Seplos
; Available BMS, but disabled by default (just enter one or more below and it will be enabled):
;     ANT, MNB, Sinowealth
BMS_TYPE = Jkbms

; Exclute this serial devices from the driver startup
; Example:
;     /dev/ttyUSB2, /dev/ttyUSB4
EXCLUDED_DEVICES =

; Auto reset SoC
; If on, then SoC is reset to 100%, if the value switches from absorption to float voltage
; Currently only working for Daly BMS and JKBMS BLE
AUTO_RESET_SOC = True

; Publish the config settings to the dbus path "/Info/Config/"
PUBLISH_CONFIG_VALUES = True

; Select the format of cell data presented on dbus [Valid values 0,1,2,3]
; 0 Do not publish all the cells (only the min/max cell data as used by the default GX)
; 1 Format: /Voltages/Cell (also available for display on Remote Console)
; 2 Format: /Cell/#/Volts
; 3 Both formats 1 and 2
BATTERY_CELL_DATA_FORMAT = 1

; Simulate Midpoint graph (True/False).
MIDPOINT_ENABLE = False

; Battery temperature
; Specify how the battery temperature is assembled
; 0 Get mean of temperature sensor 1 to sensor 4
; 1 Get only temperature from temperature sensor 1
; 2 Get only temperature from temperature sensor 2
; 3 Get only temperature from temperature sensor 3
; 4 Get only temperature from temperature sensor 4
TEMP_BATTERY = 0

; Temperature sensor 1 name
TEMP_1_NAME = PackTemp 1-8

; Temperature sensor 2 name
TEMP_2_NAME = PackTemp 8-16

; Temperature sensor 2 name
TEMP_3_NAME = Temp 3

; Temperature sensor 2 name
TEMP_4_NAME = Temp 4


; --------- BMS specific settings ---------

; -- LltJbd settings
; SoC low levels
; Note: SOC_LOW_WARNING is also used to calculate the Time-To-Go even if you are not using a LltJbd BMS
SOC_LOW_WARNING = 20
SOC_LOW_ALARM   = 10

; -- Daly settings
; Battery capacity (amps), if the BMS does not support reading it
BATTERY_CAPACITY = 50
; Invert Battery Current. Default non-inverted. Set to -1 to invert
INVERT_CURRENT_MEASUREMENT = 1

; -- JKBMS settings
; Predefines cell count for Jkbms_can
; The cell count should be auto-detected by identifying the highest cell number,
; but this process may be sometimes slow what could cause that cells voltage is not not
; updated in VenusOS. Try this workaround if you experience problems with cell voltage.
JKBMS_CAN_CELL_COUNT = 16

; -- ESC GreenMeter and Lipro device settings
GREENMETER_ADDRESS  = 1
LIPRO_START_ADDRESS = 2
LIPRO_END_ADDRESS   = 4
LIPRO_CELL_COUNT    = 15

; -- HeltecModbus (Heltec SmartBMS/YYBMS) settings
; Set the Modbus addresses from the adapters
; Separate each address to check by a comma like: 1, 2, 3, ...
; factory default address will be 1
HELTEC_MODBUS_ADDR = 1


; --------- Voltage drop ---------
; If you have a voltage drop between the BMS and the charger because of wire size or length
; then you can specify the voltage drop here. The driver will then add the voltage drop
; to the calculated CVL to compensate.
; Example:
;     cell count: 16
;     MAX_CELL_VOLTAGE = 3.45
;     max voltage calculated = 16 * 3.45 = 55.20
;     CVL is set to 55.20 V and the battery is now charged until the charger reaches 55.20 V.
;     The BMS now measures 55.05 V since there is a voltage drop of 0.15 V on the cable.
;     Since the dbus-serialbattery reads the voltage of 55.05 V from the BMS the max voltage
;     of 55.20 V is never reached and max voltage is kept forever.
;     By setting the VOLTAGE_DROP to 0.15 V the voltage on the charger is increased and the
;     target voltage on the BMS is reached.
VOLTAGE_DROP = 0.00

Relevant log output

2024-04-22 08:25:22.622995500 INFO:SerialBattery:
2024-04-22 08:25:22.623734500 INFO:SerialBattery:Starting dbus-serialbattery
2024-04-22 08:25:22.625794500 INFO:SerialBattery:Venus OS v3.30
2024-04-22 08:25:22.626463500 INFO:SerialBattery:dbus-serialbattery v1.2.20240401
2024-04-22 08:25:39.133633500 INFO:SerialBattery:Init of Jkbms_Ble at C8:47:8C:E9:0C:E6
2024-04-22 08:25:39.134420500 INFO:SerialBattery:Test of Jkbms_Ble at C8:47:8C:E9:0C:E6
2024-04-22 08:25:44.152612500 INFO:SerialBattery:BAT: JKBMS 10.XW 16 cells (20230331)
2024-04-22 08:25:44.154196500 INFO:SerialBattery:Connection established to Jkbms_Ble
2024-04-22 08:25:47.230669500 INFO:SerialBattery:Found existing battery with DeviceInstance = 1
2024-04-22 08:25:47.753293500 INFO:SerialBattery:DeviceInstance = 1
2024-04-22 08:25:47.755405500 INFO:SerialBattery:PID file created successfully: /var/tmp/dbus-serialbattery_1.pid
2024-04-22 08:25:47.756384500 INFO:SerialBattery:Used DeviceInstances = ['1']
2024-04-22 08:25:47.757569500 INFO:SerialBattery:com.victronenergy.battery.ble_c8478ce90ce6
2024-04-22 08:25:47.758934500 INFO:SerialBattery:BAT: JKBMS 10.XW 16 cells (20230331)
2024-04-22 08:25:47.840511500 INFO:SerialBattery:publish config values = True
2024-04-22 08:25:47.881884500 INFO:SerialBattery:Battery Jkbms_Ble connected to dbus from ble_c8478ce90ce6
2024-04-22 08:25:47.882567500 INFO:SerialBattery:========== Settings ==========
2024-04-22 08:25:47.883492500 INFO:SerialBattery:> Connection voltage: 54.62V | Current: 3.6A | SoC: 90.48%
2024-04-22 08:25:47.884304500 INFO:SerialBattery:> Cell count: 16 | Cells populated: 32
2024-04-22 08:25:47.885108500 INFO:SerialBattery:> LINEAR LIMITATION ENABLE: True
2024-04-22 08:25:47.885938500 INFO:SerialBattery:> MIN CELL VOLTAGE: 2.9V | MAX CELL VOLTAGE: 3.415V
2024-04-22 08:25:47.886778500 INFO:SerialBattery:> MAX BATTERY CHARGE CURRENT: 120.0A | MAX BATTERY DISCHARGE CURRENT: 150.0A
2024-04-22 08:25:47.887694500 INFO:SerialBattery:> MAX BATTERY CHARGE CURRENT: 100.0A | MAX BATTERY DISCHARGE CURRENT: 140.0A (read from BMS)
2024-04-22 08:25:47.888909500 INFO:SerialBattery:> CVCM:     True
2024-04-22 08:25:47.890060500 INFO:SerialBattery:> CCCM CV:  True  | DCCM CV:  True
2024-04-22 08:25:47.891165500 INFO:SerialBattery:> CCCM T:   True  | DCCM T:   True
2024-04-22 08:25:47.898761500 INFO:SerialBattery:> CCCM SOC: False | DCCM SOC: False
2024-04-22 08:25:47.901395500 INFO:SerialBattery:Serial Number/Unique Identifier: 2092416547
2024-04-22 08:25:48.037109500 INFO:SerialBattery:SOC initialized from dbus and set to 90.48%
2024-04-22 08:45:26.595390500 INFO:SerialBattery:JK BMS SOC reset finished.

Any other information that may be helpful

No response

@Honusnap Honusnap added the bug Something isn't working label Apr 22, 2024
@mr-manuel
Copy link
Owner

@Honusnap
Copy link
Author

Honusnap commented Apr 24, 2024

Hello,
Thanks for the link but .. i can't see any solution here ... i'm using Calculated SOC, meaning it's not the BMS SOC that is now displayed but the calculated one from serialbattery. Why should we have SOC_RESET_VOLTAGE has to be higher then MAX_CELL_VOLTAGE ? It generate high voltage error before reaching SOC_RESET_VOLTAGE... !
This is not a normal way, just let it be a arbitrary value ... i want to reset SOC at the first cell reaching 3.62V .. even if my MAX_CELL_VOLTAGE = 3.64V. It prevent the high voltage error... and still is vebry accurate since there is near no Wh between those 2 voltages.

In the link yopu provided user finaly say :

That's unfortunate, I was indeed looking for a way to "unconditionally" override the BMS settings. As my target cell voltage and the BMS settings are 0.1125v apart, I now understand this is not going to work anyway.

Thanks anyway for your support and great battery driver! Good to see active development and support.

It's the same conclusion as mine.

@mr-manuel
Copy link
Owner

I missunderstood something. Indeed, if you are using the calculated SOC you do not need the SOC_RESET_VOLTAGE.

I optimized the procedure in the latest nightly version, please install it and test it. Set the MAX_CELL_VOLTAGE to your desired value.

@Honusnap
Copy link
Author

Honusnap commented Apr 25, 2024

Or maybe there is something i do not get ...

If you are using the calculated SOC you do not need the SOC_RESET_VOLTAGE."

I use calculated SOC yes, but SOC_RESET_VOLTAGE is the value that reset SOC to 100%, i still need it right ? This mecanism is still needed to reset SOC to 100% ? If not .. how does it reset ?

Thanks Manuel, will try your nightly.

@mr-manuel
Copy link
Owner

SOC_RESET_VOLTAGE is only needed, if the BMS needs a specific cell voltage to reset the SOC back to 100%. For older JKBMS this is for example the OVP value.

If you are using the SOC calculation of the driver, then the SOC is reset when one cell reaches MAX_CELL_VOLTAGE and the current is below SOC_RESET_CURRENT for SOC_RESET_TIME seconds.

@Honusnap
Copy link
Author

Honusnap commented Apr 25, 2024

Ooooo i did not know that .. ! I suppose i missed something in the doc/config.ini.

With the changes that you did in nightly the SOC_RESET_VOLTAGE is still not used in Driver SOC calculation mode .. right ? Or is it ? why not use this same SOC_RESET_VOLTAGE instead of MAX_CELL_VOLTAGE even in SOC calculation mode ?

In my case ..... since my cells are balanced... MAX_CELL_VOLTAGE on one cell is reached at the same time (or near) as High voltage alarm (not all the time but often) which make things not really confortable.
What do you think ?

@mr-manuel
Copy link
Owner

With the changes that you did in nightly the SOC_RESET_VOLTAGE is still not used in Driver SOC calculation mode .. right ?

Correct.

Other settings do not make sense. Incease OVP voltage or lower MAX_CELL_VOLTAGE.

@Honusnap
Copy link
Author

Honusnap commented Apr 26, 2024

Other settings do not make sense. Incease OVP voltage or lower MAX_CELL_VOLTAGE.

OVP protection as nothing to do here... i never reach OVP, it's a security not to be reached in normal use.
Lowering MAX_CELL_VOLTAGE : will not help cause high voltage alarm will also decrease and still fiil my screen with alarm.

Tthen the SOC is reset when one cell reaches MAX_CELL_VOLTAGE and the current is below SOC_RESET_CURRENT for SOC_RESET_TIME seconds.

Then i will have a "high voltage" alarm each time i want a SOC RESET.... cause my pack reach MAX_CELL_VOLTAGEx16 at the same time one my cell reach MAX_CELL_VOLTAGE.

Not everybody work by charging their pack high where the cells deviation is high... ! I do not .. meaning the actual system do not work. Even in Calculated SOC, there is a need for a SOC_RESET_VOLTAGE setting that can be lower then MAX_CELL_VOLTAGE.

There is something that i miss cause it seems so obvious that i do onot understand.
1- If pack voltage > MAX_CELL_VOLTAGEx16 => Alarm High voltage (i suppose that .. is it how it's calculated for alarm ?)
2 - if i want a SOC reset in calculated SOC mode, i need one cell > MAX_CELL_VOLTAGE
=> When cells are perfectly balanced (cause we are in the gentle spot of the pack) .. what can we do to have SOC reset without alarm ?

@mr-manuel
Copy link
Owner

mr-manuel commented Apr 26, 2024

You can set MAX_CELL_VOLTAGE to whatever you want. If you have OVP set to 3.60 on the BMS then you can set MAX_CELL_VOLTAGE to 3.55 in the driver.

If it's still not clear please post some screenshots of the high voltage warning/error and all the settings of your BMS. If you are not reaching OVP then probably the alarm is not comming from the BMS.

@Honusnap
Copy link
Author

Honusnap commented Apr 26, 2024

Changing MAX_CELL_VOLTAGE will have no impact on this problem.

; --------- SOC calculation ---------
; Description:
;     Calculate the SOC in the driver. Do not use the SOC reported by the BMS
; SOC_CALCULATION:
;     True: Calc SOC in the driver, do not use SOC reported from BMS
;         - The SOC is calculated by integration of the current reported by the BMS
;         - The current reported from the BMS can be corrected by
;           the map (SOC_CALC_CURRENT_REPORTED_BY_BMS, SOC_CALC_CURRENT_MEASURED_BY_USER)
;         - The SOC is set to 100% if the following conditions apply for at least SOC_RESET_TIME seconds:
;             * Current is lower than SOC_RESET_CURRENT amps
;             * Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP_
;         - The calculated SOC is stored in dbus to persist a driver restart
;     False: Use SOC reported from BMS (none of the other parameters apply)
; More info: https://github.com/Louisvdw/dbus-serialbattery/pull/868
SOC_CALCULATION   = True
SOC_RESET_CURRENT = 5
SOC_RESET_TIME    = 30
SOC_CALC_CURRENT_REPORTED_BY_BMS = -200, -100, -50, -25, -10, -5.9, -5, -3.4, -3.0, -2.4, -2.2, -1.4, -0.5, 0, 0.5, 1, 1.8, 2.2, 2.6, 2.8, 3, 3.35, 3.8, 4, 4.5, 5, 5
SOC_CALC_CURRENT_MEASURED_BY_USER = -200, -100, -50, -25, -10, -6.2, -5, -3.2, -2.70, -2.2, -2.1, -1, 0, 0, 0, 0.5, 1, 1.5, 2, 2.3, 2.55, 3, 3.55, 3.8, 4.35, 4.9, 5

self.max_battery_voltage ? What is that .. where does it come from, there is no other reference to this self.max_battery_voltage constant/variable in the config.ini
Is it like it seems to be : max_battery_voltage = MAX_CELL_VOLTAGE * Cells Count (16 in most cases) ?
And at which value will a High voltage alarm be raised ?

@mr-manuel
Copy link
Owner

mr-manuel commented Apr 27, 2024

Without screenshots I'm not able to help you. If the alarm is raised by the BMS it is triggered directly by the BMS, there are no settings for that in the driver.

  1. Screenshot of the alarm in the Remote Console/GUI
  2. Screenshots of the settings in the JKBMS app

@Honusnap
Copy link
Author

Honusnap commented Apr 27, 2024

Can you explain what is : * Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP_
IS self.max_battery_voltage = MAX_CELL_VOLTAGE * Cells Count (16 in most cases) ?

message today : 2024-04-27 11:30:19.730078500 INFO:SerialBattery:JK BMS SOC reset finished.

IMG_20240427_143109
IMG_20240427_143116

@mr-manuel
Copy link
Owner

You don't have to always quote the text I wrote, if you directly reply to it.

I don't know where you got this code from. Since you are not answering to my questions and posting the requested screenshots, I think we are not getting to a point. I will reply again, if you posted the requested screenshots.

@mr-manuel mr-manuel added invalid This doesn't seem right and removed bug Something isn't working labels Apr 27, 2024
@Honusnap
Copy link
Author

Honusnap commented Apr 27, 2024

This code ? It comes from the config.ini ?
"Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP" <= Config.ini file

@mr-manuel
Copy link
Owner

Check the latest update to the config.default.ini:

; --------- SOC calculation ---------
; +++ This has nothing to do with "SOC reset voltage" in a section above +++
; Description:
; Calculate the SOC in the driver. Do not use the SOC reported by the BMS
; SOC_CALCULATION:
; True: Calc SOC in the driver, do not use SOC reported from BMS
; - The SOC is calculated by integration of the current reported
; - The current reported can be corrected by the map
; (SOC_CALC_CURRENT_REPORTED_BY_BMS, SOC_CALC_CURRENT_MEASURED_BY_USER)
; - The SOC is set to 100% if the following conditions apply for at least SOC_RESET_TIME seconds:
; * Highest cell voltage is higher or equal to MAX_CELL_VOLTAGE
; * Current is lower than SOC_RESET_CURRENT
; - The SOC is set to 0% if the following conditions apply for at least SOC_RESET_TIME seconds:
; * Lowest cell voltage is lower or equal to MIN_CELL_VOLTAGE
; * Battery is discharging
; - The calculated SOC is stored in dbus to persist a driver restart

Still waiting for the requested screenshots.

@mr-manuel
Copy link
Owner

Can you explain what is : * Sum of cell voltages >= self.max_battery_voltage - VOLTAGE_DROP_
IS self.max_battery_voltage = MAX_CELL_VOLTAGE * Cells Count (16 in most cases) ?

Yes. See

self.soc_reset_battery_voltage = round(
utils.SOC_RESET_VOLTAGE * self.cell_count, 2
)
if self.soc_reset_requested:
self.max_battery_voltage = self.soc_reset_battery_voltage
else:
self.max_battery_voltage = round(
utils.MAX_CELL_VOLTAGE * self.cell_count, 2
)

@Honusnap
Copy link
Author

Hello,
Allright, you are right, i was making things far more complex then they are .. ! I was stupid.
Problem is solved, no more alarm, reset happend perfectly where it should now, i've used the detailed log and from there i changed the MAX_CELL_VOLTAGE (decreased just by .. 0.05V) and reset now triger after the 60s under 3A as i choosed too. It's now nearly aligned with my juntek shunt.
Perfect, thanks and sorry for makling things overly complex, i really though that this SOC_RESET_VOLTAGE was used in this calculated SOC mode too.

@Honusnap
Copy link
Author

Honusnap commented Apr 29, 2024

If you are in "SOC calculation" mode, the SOC_RESET_VOLTAGE is not used. Just set the MAX_CELL_VOLTAGE to the correct value, go a little over this voltage on your Charge controller and set those settings to your needs :

SOC_CALCULATION = True
SOC_RESET_CURRENT = 3
SOC_RESET_TIME = 60
SOC_CALC_CURRENT_REPORTED_BY_BMS = -200, -100, -50, -25, -10, -5.9, -5, -3.4, -3.0, -2.4, -2.2, -1.4, -0.5, 0, 0.5, 1, 1.8, 2.2, 2.6, 2.8, 3, 3.35, 3.8, 4, 4.5, 5, 5
SOC_CALC_CURRENT_MEASURED_BY_USER = -200, -100, -50, -25, -10, -6.2, -5, -3.2, -2.70, -2.2, -2.1, -1, 0, 0, 0, 0.5, 1, 1.5, 2, 2.3, 2.55, 3, 3.55, 3.8, 4.35, 4.9, 5

Thanks again

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
invalid This doesn't seem right
Projects
None yet
Development

No branches or pull requests

2 participants