• Have you tried out dark mode?! Scroll to the bottom of any page to find a sun or moon icon to turn dark mode on or off!

diy solar

diy solar

YamBMS JK-BMS-CAN with new Cut-Off Charging Logic (open-source)

I haven’t looked at the Victron integration yet. I assume you pull the data from shunt via a Victron ve direct cable?
 
@Sleeper85

I'm aware that I'm likely part of a very small group with a 15s battery pack. My solar system is installed in my home country, and recently, one of the cells failed, so I had a friend remove it.

The challenge I'm facing is that the minimum absorption voltage (among other settings) is fixed at 54, which isn't suitable for my 15s pack. As a result, I need to modify the YAML configuration to adjust the minimum value to fit my pack's range.

While this is a minor issue, it requires me to manually change these values with each update. Would it be possible to expand the default range to accommodate a wider variety of setups like mine?
 
Last edited:
@cinusik @widget4145 and all JK-PB users.

@txubelaxu has made a lot of changes lately and again today. The JK-PB RS485 component now allows to read and write the parameters of the JK-PB. A new switch has been added, it allows to define if you want to synchronize the BMS parameters or not? If it is active and you change a value, it will be changed on all BMS.

View attachment 235998
Testing it now. Setting BMS parameters from HA it's a huge step forward, like this broadcast button and debug parameters.
Excellent job guys! (y)
@Sleeper85 Consider registering on https://buymeacoffee.com/ so people can send some coffee's to You ;)
 
Testing it now. Setting BMS parameters from HA it's a huge step forward, like this broadcast button and debug parameters.
Excellent job guys! (y)
@Sleeper85 Consider registering on https://buymeacoffee.com/ so people can send some coffee's to You ;)
I agree, he needs a button for that. I believe lots of people here are willing to buy him a beer. He well deserve it, and all other contributors.
 
@Sleeper85, one question: I saw that the inverter offset voltage is summed with n the requested charge voltage; isn’t the case of adding the offset on the battery total voltage?

No, the Inverter offset V. is used to correct the offset between inverter and BMS to reach the target Bulk voltage (55.2V by default). The offset is not counted in the charging logic, the goal is to reach 55.2V on the BMS side.
 
@MrPablo @shvm @Der_Hannes and other

@Fahmula @ScrotpusGobbleBottom

To simplify and meet the different configurations 15S/16S or LFP/Li-ion/LTO I think I will remove a lot of options to modify before compiling by something simpler. The default values will be automatically calculated according to the battery chemistry and the number of cells.

I will take safe values as defaults like for example for LFP :
  • Bulk : 3.45V
  • Float : 3.35V
  • Rebulk : 3.3V
  • Absorption Offset : 0.1V
  • Inverter Offset V. : 0.0V
This will automatically set the min/max and default values which can be changed in HA or Web.

If I take the example of a 15S LFP the values will be:
  • Bulk min : 3.37 * 15 = 50.55V
  • Bulk max : 3.65 * 15 = 54.75V
  • Bulk default : 3.45 * 15 = 51.75V

What do you think?

Now :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Bulk / Absorption Voltage : corresponds to the Bulk voltage that will be used to charge the battery. (55.2V = 3.45V/Cell for 16S battery)
      yambms_bulk_v: '55.2'
      # Float Voltage : corresponds to the voltage at which the battery would be maintained at the end of the absorption phase. (53.6V = 3.35V/Cell for 16S battery)
      yambms_float_v: '53.6'
      # Rebulk voltage, voltage less than FLOAT at which BMS requests rebulk. (52.8V = 3.3V/Cell for 16S battery)
      yambms_rebulk_v: '52.8'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the end of charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Absorption Offset V.
      yambms_absorption_offset_v: '0.1'
      yambms_absorption_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Inverter Offset V. allows you to correct the inverter charging voltage.
      # Requested Charging Voltage = Bulk. V + Inverter Offset V.
      yambms_inverter_offset_v: "0.1"
      yambms_inverter_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
      # Cutoff Charging Logic
      yambms_cutoff_cvmin: '3.37' # LFP 3.37 - Li-ion 3.90
      yambms_cutoff_cvmax: '3.65' # LFP 3.65 - Li-ion 4.20


After :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Battery Chemistry
      yambms_battery_chemistry: '1' # 1-LFP | 2-Li-ion | 3-LTO
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the End Of Charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
 
@MrPablo @shvm @Der_Hannes and other

@Fahmula @ScrotpusGobbleBottom

To simplify and meet the different configurations 15S/16S or LFP/Li-ion/LTO I think I will remove a lot of options to modify before compiling by something simpler. The default values will be automatically calculated according to the battery chemistry and the number of cells.

I will take safe values as defaults like for example for LFP :
  • Bulk : 3.45V
  • Float : 3.35V
  • Rebulk : 3.3V
  • Absorption Offset : 0.1V
  • Inverter Offset V. : 0.0V
This will automatically set the min/max and default values which can be changed in HA or Web.

If I take the example of a 15S LFP the values will be:
  • Bulk min : 3.37 * 15 = 50.55V
  • Bulk max : 3.65 * 15 = 54.75V
  • Bulk default : 3.45 * 15 = 51.75V

What do you think?

Now :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Bulk / Absorption Voltage : corresponds to the Bulk voltage that will be used to charge the battery. (55.2V = 3.45V/Cell for 16S battery)
      yambms_bulk_v: '55.2'
      # Float Voltage : corresponds to the voltage at which the battery would be maintained at the end of the absorption phase. (53.6V = 3.35V/Cell for 16S battery)
      yambms_float_v: '53.6'
      # Rebulk voltage, voltage less than FLOAT at which BMS requests rebulk. (52.8V = 3.3V/Cell for 16S battery)
      yambms_rebulk_v: '52.8'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the end of charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Absorption Offset V.
      yambms_absorption_offset_v: '0.1'
      yambms_absorption_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Inverter Offset V. allows you to correct the inverter charging voltage.
      # Requested Charging Voltage = Bulk. V + Inverter Offset V.
      yambms_inverter_offset_v: "0.1"
      yambms_inverter_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
      # Cutoff Charging Logic
      yambms_cutoff_cvmin: '3.37' # LFP 3.37 - Li-ion 3.90
      yambms_cutoff_cvmax: '3.65' # LFP 3.65 - Li-ion 4.20


After :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Battery Chemistry
      yambms_battery_chemistry: '1' # 1-LFP | 2-Li-ion | 3-LTO
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the End Of Charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
Good idea. As long as invidual/previous values are still configurable for some "weird" requirements in separate yaml or whatever.
 
@MrPablo @shvm @Der_Hannes and other

@Fahmula @ScrotpusGobbleBottom

To simplify and meet the different configurations 15S/16S or LFP/Li-ion/LTO I think I will remove a lot of options to modify before compiling by something simpler. The default values will be automatically calculated according to the battery chemistry and the number of cells.

I will take safe values as defaults like for example for LFP :
  • Bulk : 3.45V
  • Float : 3.35V
  • Rebulk : 3.3V
  • Absorption Offset : 0.1V
  • Inverter Offset V. : 0.0V
This will automatically set the min/max and default values which can be changed in HA or Web.

If I take the example of a 15S LFP the values will be:
  • Bulk min : 3.37 * 15 = 50.55V
  • Bulk max : 3.65 * 15 = 54.75V
  • Bulk default : 3.45 * 15 = 51.75V

What do you think?

Now :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Bulk / Absorption Voltage : corresponds to the Bulk voltage that will be used to charge the battery. (55.2V = 3.45V/Cell for 16S battery)
      yambms_bulk_v: '55.2'
      # Float Voltage : corresponds to the voltage at which the battery would be maintained at the end of the absorption phase. (53.6V = 3.35V/Cell for 16S battery)
      yambms_float_v: '53.6'
      # Rebulk voltage, voltage less than FLOAT at which BMS requests rebulk. (52.8V = 3.3V/Cell for 16S battery)
      yambms_rebulk_v: '52.8'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the end of charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Absorption Offset V.
      yambms_absorption_offset_v: '0.1'
      yambms_absorption_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Inverter Offset V. allows you to correct the inverter charging voltage.
      # Requested Charging Voltage = Bulk. V + Inverter Offset V.
      yambms_inverter_offset_v: "0.1"
      yambms_inverter_offset_v_slider: 'false' # true: the slider is hidden, false: the slider is available
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
      # Cutoff Charging Logic
      yambms_cutoff_cvmin: '3.37' # LFP 3.37 - Li-ion 3.90
      yambms_cutoff_cvmax: '3.65' # LFP 3.65 - Li-ion 4.20


After :

YAML:
  yambms1: !include
    file: packages/yambms/yambms.yaml
    vars:
      # Please read the cut off charging logic README to understand how the YamBMS works
      yambms_id: 'yambms1'
      yambms_name: 'YamBMS 1'
      yambms_update_interval: '1s'
      # Input numbers can be displayed as a slider or an input box, options are 'slider' or 'box'.
      yambms_input_number_mode: 'slider'
      # Battery Chemistry
      yambms_battery_chemistry: '1' # 1-LFP | 2-Li-ion | 3-LTO
      # Number of cells in series, 16S by default
      # In the case where a cell is defective with a BMS reporting one cell less than reality, this avoids sending bad charging parameters to the inverter.
      yambms_cell_count: '16'
      # Allows the charging process to complete within 30 minutes even if the cells are still equalizing
      # This timer can be deactivated with a switch
      yambms_eoc_timer: '30'
      # Time in seconds during which the End Of Charge conditions must be respected (cut-off + cells not equalizing)
      yambms_cutoff_timer: '60'
      # Maximum charging cycles is used to calculate the battey SOH, LF280K v3 =8000.0, LF280K v2 =6000.0, LF280=3000.0 (decimal is required)
      yambms_max_cycles: '6000.0'
I think I might have already recommended this beginning of the year
 
Hi everyone, I have little experience and I need help with YamBMS. In stock 2 Jk-PB BMS. 32 Batteries EVE 280.

I'm confused about what to buy for YamBMS.

YamBMS works fine with resistive balancer? Is it possible to set up balancing on a schedule?

I want to use a Victron smart shunt. Can you tell me what components I need to buy? The solar station is under construction. Inverter Deye SUN-12K-SG02LP1-EU-AM3

I don't know English, I use a translator.
 
Hi everyone, I have little experience and I need help with YamBMS. In stock 2 Jk-PB BMS. 32 Batteries EVE 280.

I'm confused about what to buy for YamBMS.

YamBMS works fine with resistive balancer? Is it possible to set up balancing on a schedule?

I want to use a Victron smart shunt. Can you tell me what components I need to buy? The solar station is under construction. Inverter Deye SUN-12K-SG02LP1-EU-AM3

I don't know English, I use a translator.

Atom S3 + Atomic CAN base + RS485 unit

The easiest solution but with the disadvantage of having few GPIOs would be what I showed in the links above.

This solution is able to supervise several JK-PB BMS on a RS485 bus and a shunt (requires soldering two wires on the Atomic CAN base).

Why do you want to add balancers when there is already an active balancer in the JK-PB?

Atom S3 Lite can be replaced by Atom S3 which has a screen.

I also invite you to read the documentation, I put the links on the first post of this topic.
 
I don't like using active balancer for batteries LiFePO4
The previous station uses a 7A passive balancer. It works well.

I read the documentation. I didn't understand which pins to connect to Victron smart shunt.

Sorry for asking stupid questions. This is my first time working with ESP32.
 

diy solar

diy solar
Back
Top