Louisvdw / dbus-serialbattery

Battery Monitor driver for serial battery in VenusOS GX systems
MIT License
525 stars 164 forks source link

Driver Locks itself out #850

Closed Foxconn11 closed 10 months ago

Foxconn11 commented 10 months ago

Describe the bug

So, i have two Daly BMS connected via USB-TTL to a Cebro (v3.11) and Running the Newest version of dbus-serialbattery to this time.

Problem i found is: My System is discharged right now (BatteryLive cuts at 45%, ESS#1 ESS#2) and no Charge or Discharge happening. BMS going to Sleep after roughly 2 hours. When it Happens, i get

2023-11-01 04:09:01.055014500 INFO:SerialBattery:Testing Daly 2023-11-01 04:09:01.195127500 ERROR:SerialBattery:>>> ERROR: No reply - returning 2023-11-01 04:09:01.696791500 ERROR:SerialBattery:ERROR >>> No battery connection at /dev/ttyUSB0

when this happens its Blocking Charging and Discharging from the whole System, MPPT, Multiplus etc. So it cannot start anymore until there is some Current on the BMS. It Locks itself out.

In config.ini i set

BLOCK_ON_DISCONNECT = False

wich should prevent this or am i wrong?

How to reproduce

Have A empty Battery ESS blocks Discharge BMS goes to Sleep dbus-serialbattery can't read any Data from BMS Cebro makes constant Alarm dbus-serialbattery blocks charge and discharge System Locked out

Expected behavior

no Blockage because i set BLOCK_ON_DISCONNECT to False

Driver version

1.0.20230531

Venus OS device type

Cerbo GX

Venus OS version

v3.11

BMS type

Daly Smart BMS

Cell count

4

Connection type

Serial USB adapter to TTL

Config file

[DEFAULT]

; --------- Battery Current limits ---------
MAX_BATTERY_CHARGE_CURRENT    = 100.0
MAX_BATTERY_DISCHARGE_CURRENT = 200.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
MAX_CELL_VOLTAGE   = 3.500
FLOAT_CELL_VOLTAGE = 3.375

; --------- 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
; True: Charge and discharge is blocked on BMS communication loss, it's unblocked when connection is established
;       again or the driver/system is restarted
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 = 30

; 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

; --------- 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 300 (fixed)
;                      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: 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 90%
;          OR
;          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 300 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 90%.
; 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 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)
; Specify how long the max voltage should be kept, if reached then switch to float voltage
MAX_VOLTAGE_TIME_SEC = 7200

; Specify SoC where CVL limit is reset to max voltage, if value gets below
SOC_LEVEL_TO_RESET_VOLTAGE_LIMIT = 90

; 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.55, 3.50, 3.45, 3.30
MAX_CHARGE_CURRENT_CV_FRACTION =    0, 0.05,  0.5,    1

CELL_VOLTAGES_WHILE_DISCHARGING   = 2.70, 2.80, 2.90, 3.10
MAX_DISCHARGE_CURRENT_CV_FRACTION =    0,  0.1,  0.5,    1

; --------- 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
TEMPERATURE_LIMITS_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

TEMPERATURE_LIMITS_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

; Charge current soc limits
CC_SOC_LIMIT1 = 98
CC_SOC_LIMIT2 = 95
CC_SOC_LIMIT3 = 91

; Charge current limits
CC_CURRENT_LIMIT1_FRACTION = 0.1
CC_CURRENT_LIMIT2_FRACTION = 0.3
CC_CURRENT_LIMIT3_FRACTION = 0.5

; Discharge current soc limits
DC_SOC_LIMIT1 = 10
DC_SOC_LIMIT2 = 20
DC_SOC_LIMIT3 = 30

; Discharge current limits
DC_CURRENT_LIMIT1_FRACTION = 0.1
DC_CURRENT_LIMIT2_FRACTION = 0.3
DC_CURRENT_LIMIT3_FRACTION = 0.5

TIME_TO_GO_ENABLE = False

; --------- 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 = 1
; 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 only one BMS type 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:
; https://louisvdw.github.io/dbus-serialbattery/general/install#how-to-enable-a-disabled-bms
; Ant, MNB, Sinowealth
BMS_TYPE =

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

; 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 = Temp 1

; Temperature sensor 2 name
TEMP_2_NAME = Temp 2

; 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 = 180
; Invert Battery Current. Default non-inverted. Set to -1 to invert
INVERT_CURRENT_MEASUREMENT = -1

; -- 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

; --------- Battery monitor specific settings ---------
; If you are using a SmartShunt or something else as a battery monitor, the battery voltage reported
; from the BMS and SmartShunt could differ. This causes, that the driver never goapplies the float voltage,
; since max voltage is never reached.
; Example:
;     cell count: 16
;     MAX_CELL_VOLTAGE = 3.45
;     max voltage calculated = 16 * 3.45 = 55.20
;     CVL is set to 55.20 and the battery is now charged until the SmartShunt measures 55.20 V. The BMS
;     now measures 55.05 V since there is a voltage drop of 0.15 V. Since the dbus-serialbattery measures
;     55.05 V the max voltage is never reached for the driver and max voltage is kept forever.
;     Set VOLTAGE_DROP to 0.15
VOLTAGE_DROP = 0.15

Relevant log output

2023-11-02 15:42:48.951594500 INFO:SerialBattery:Starting dbus-serialbattery
2023-11-02 15:42:48.953165500 INFO:SerialBattery:dbus-serialbattery v1.0.20230531
2023-11-02 15:42:48.953926500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:49.140213500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:49.141072500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:49.325289500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:49.826930500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:50.010344500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:50.011132500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:50.199247500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:50.701492500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:50.891926500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:50.892721500 INFO:SerialBattery:Testing Daly
2023-11-02 15:42:51.077598500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:42:51.579313500 ERROR:SerialBattery:ERROR >>> No battery connection at /dev/ttyUSB1
2023-11-02 15:42:51.579573500

2023-10-29 16:37:52.524776500 *** CCGX booted (0) ***
2023-11-01 03:54:48.492646500 *** CCGX booted (0) ***
2023-11-01 04:08:59.332642500 INFO:SerialBattery:Starting dbus-serialbattery
2023-11-01 04:08:59.334046500 INFO:SerialBattery:dbus-serialbattery v1.0.20230531
2023-11-01 04:08:59.335082500 INFO:SerialBattery:Testing Daly
2023-11-01 04:08:59.479289500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:08:59.480330500 INFO:SerialBattery:Testing Daly
2023-11-01 04:08:59.621751500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:09:00.123469500 INFO:SerialBattery:Testing Daly
2023-11-01 04:09:00.265162500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:09:00.265942500 INFO:SerialBattery:Testing Daly
2023-11-01 04:09:00.411302500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:09:00.913090500 INFO:SerialBattery:Testing Daly
2023-11-01 04:09:01.054251500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:09:01.055014500 INFO:SerialBattery:Testing Daly
2023-11-01 04:09:01.195127500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-01 04:09:01.696791500 ERROR:SerialBattery:ERROR >>> No battery connection at /dev/ttyUSB0
2023-11-01 04:09:01.697054500
2023-11-01 04:11:44.474796500 *** CCGX booted (0) ***
2023-11-01 08:55:22.409839500 *** CCGX booted (0) ***
2023-11-01 09:02:36.509128500 *** CCGX booted (0) ***
2023-11-01 09:26:03.470561500 *** CCGX booted (0) ***

2023-11-02 15:43:21.608785500 INFO:SerialBattery:Starting dbus-serialbattery
2023-11-02 15:43:21.610194500 INFO:SerialBattery:dbus-serialbattery v1.0.20230531
2023-11-02 15:43:21.610854500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:21.796706500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:21.797921500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:21.981310500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:22.482962500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:22.675065500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:22.675815500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:22.859502500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:23.361110500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:23.545174500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:23.546010500 INFO:SerialBattery:Testing Daly
2023-11-02 15:43:23.730345500 ERROR:SerialBattery:>>> ERROR: No reply - returning
2023-11-02 15:43:24.231817500 ERROR:SerialBattery:ERROR >>> No battery connection at /dev/ttyUSB2
2023-11-02 15:43:24.232065500

2023-11-02 15:40:07.439686500 INFO: Start service vedirect-interface.ttyUSB2 once
2023-11-02 15:40:12.715888500 INFO: Start service gps-dbus.ttyUSB1 once
2023-11-02 15:40:13.931690500 INFO: Start service dbus-serialbattery.ttyUSB2 once
2023-11-02 15:40:19.250256500 INFO: Start service dbus-cgwacs.ttyUSB2 once
2023-11-02 15:40:22.492558500 INFO: Start service vedirect-interface.ttyUSB1 once
2023-11-02 15:40:27.811062500 INFO: Start service dbus-serialbattery.ttyUSB1 once
2023-11-02 15:40:33.113705500 INFO: Start service dbus-cgwacs.ttyUSB1 once
2023-11-02 15:40:44.688612500 INFO: Start service gps-dbus.ttyUSB2 once
2023-11-02 15:40:54.037263500 INFO: Start service vedirect-interface.ttyUSB2 once
2023-11-02 15:40:59.342184500 INFO: Start service gps-dbus.ttyUSB1 once
2023-11-02 15:41:00.573912500 INFO: Start service dbus-serialbattery.ttyUSB2 once
2023-11-02 15:41:05.887997500 INFO: Start service dbus-cgwacs.ttyUSB2 once
2023-11-02 15:41:09.164008500 INFO: Start service vedirect-interface.ttyUSB1 once
2023-11-02 15:41:14.457211500 INFO: Start service dbus-serialbattery.ttyUSB1 once
2023-11-02 15:41:19.799648500 INFO: Start service dbus-cgwacs.ttyUSB1 once
2023-11-02 15:41:31.302098500 INFO: Start service gps-dbus.ttyUSB2 once
2023-11-02 15:41:40.683701500 INFO: Start service vedirect-interface.ttyUSB2 once
2023-11-02 15:41:45.954184500 INFO: Start service gps-dbus.ttyUSB1 once
2023-11-02 15:41:47.223655500 INFO: Start service dbus-serialbattery.ttyUSB2 once
2023-11-02 15:41:52.491059500 INFO: Start service dbus-cgwacs.ttyUSB2 once
2023-11-02 15:41:55.750414500 INFO: Start service vedirect-interface.ttyUSB1 once
2023-11-02 15:42:01.034988500 INFO: Start service dbus-serialbattery.ttyUSB1 once
2023-11-02 15:42:06.348616500 INFO: Start service dbus-cgwacs.ttyUSB1 once
2023-11-02 15:42:17.762081500 INFO: Start service gps-dbus.ttyUSB2 once
2023-11-02 15:42:27.109699500 INFO: Start service vedirect-interface.ttyUSB2 once
2023-11-02 15:42:32.401768500 INFO: Start service gps-dbus.ttyUSB1 once
2023-11-02 15:42:33.609673500 INFO: Start service dbus-serialbattery.ttyUSB2 once
2023-11-02 15:42:38.923130500 INFO: Start service dbus-cgwacs.ttyUSB2 once
2023-11-02 15:42:42.267878500 INFO: Start service vedirect-interface.ttyUSB1 once
2023-11-02 15:42:47.571962500 INFO: Start service dbus-serialbattery.ttyUSB1 once

Any other information that may be helpful

No response

mr-manuel commented 10 months ago

Did you try the latest nightly from the dev branch?

mr-manuel commented 10 months ago

Search a bit in the issues and discussions. For Daly you have to set in the Daly BMS settings a specific value very high.

Foxconn11 commented 10 months ago

Search a bit in the issues and discussions. For Daly you have to set in the Daly BMS settings a specific value very high.

I tried this. I looked through the Issues and found something. https://github.com/Louisvdw/dbus-serialbattery/issues/731

I tried to set it to this number, but it won't write the value on either of the Daly BMS (I don't even know what BMS version this is. I can't even find pictures online)

I can write 60000 in the sleep value, and it writes; however, if I read the reported parameter, it only shows 13920, and that's around 4 Hours. I tried it with two different versions of the PC Master Software, but it's the same story.

I bought the batteries with BMS from a guy in Austria who used them. I even considered buying a new BMS like the JK BMS B2A8S20P and replacing the Dalys. As far as I have seen (I already have 2 for Testing purposes, and one is in my smaller Portable battery Bank), they only sleep once the Battery is empty and hits the shutdown voltage.

Screenshot 2023-11-05 141532

mr-manuel commented 10 months ago

Maybe you can upgrade the firmware.

Foxconn11 commented 10 months ago

Maybe you can upgrade the firmware.

I considered this around a year ago because i got Bluetooth Modules for the Daly BMS but couldn't get it to work. Tried so much and even asked Daly support wich was hard to find.

Yesterday i ordered the B2A8S20P from JK and i will replace the Daly with them. I hope everything works then.