Advertisement
If you have a new account but are having problems posting or verifying your account, please email us on hello@boards.ie for help. Thanks :)
Hello all! Please ensure that you are posting a new thread or question in the appropriate forum. The Feedback forum is overwhelmed with questions that are having to be moved elsewhere. If you need help to verify your account contact hello@boards.ie

JKBMS

Options
13»

Comments

  • Registered Users Posts: 226 ✭✭insular1


    Also update from Andy. Maybe when this new firmware is available I'll finally get around to updating mine. 😂



  • Registered Users Posts: 2,230 ✭✭✭SD_DRACULA


    v14.17 is out, I'll add it here if they send it to me. (Andy has it on his site)

    -V14.17 Upgrade logs

    1.Fixed a bug where parameters were lost after BMS restart. The bug is caused by a logical error in the parameter entered by the user.

    2.Change the default configuration parameters to LPF to improve security.

    2.Optimized JKBMS Modbus protocol, added RCV RFV register support. The protocol must use the PC software version V2.5.0。

    3.Fixed the Bug that the hardware version may be incorrect in the device information.

    4.Add battery low temperature alarm to dry triggers



  • Moderators, Education Moderators, Home & Garden Moderators Posts: 8,107 Mod ✭✭✭✭Jonathan




  • Registered Users Posts: 226 ✭✭insular1


    Finally got the firmware updated to the latest V14.17 (thanks @SD_DRACULA for the help).

    There seems to be some new settings that aren't making immediate sense to me. Battery (UVP) and Battery (UVPR).

    My initial thought was that this must be under voltage protection for the whole battery as opposed to the individual cell so I tried set the UVP to 40V but it won't allow me to set this and will only allow me set it in around 2.7V. The only value it seems to allow for the UVPR is 3.58v which isn't making sense to me. Anyone know what this setting is or should be?



  • Moderators, Home & Garden Moderators Posts: 5,800 Mod ✭✭✭✭graememk


    Under voltage protection,it's per cell.

    Under voltage recovery (that it will allow discharge again)



  • Advertisement
  • Registered Users Posts: 226 ✭✭insular1


    That's what's confusing me. There are settings for "Cell UVP" and "Cell UVPR" already which I have set at 2.6 and 2.65V. This is "Battery UVP" and "Battery UVPR" and wasn't an available option before the firmware update.



  • Registered Users Posts: 2,230 ✭✭✭SD_DRACULA


    I just got mine updated and running as well, set it up using the Deye can protocol and the sunsynk likes that (same inverter essentially), for anyone that might have a similar setup.

    It would be nice if we can post/decide here what all the JKBMS settings should be, I'm sure they can be applied to all of us on lifepo4, more or less.



  • Registered Users Posts: 64,791 ✭✭✭✭unkel


    It's personal preference, mostly. There's no point having LiFePO4 lower than 2.5V or higher than 3.65V (with obviously the recovery voltages near these extremes but within the range), it won't give materially capacity if you go beyond these. Stick to this and your battery should be good for decades. Some people go the other way and prefer for their battery to live for 100 years, so they set the limits to something like 3V and 3.38V 😀

    Same with balancing, a wise minimum would be somewhere between 3.45 and 3.50. Unless of course you have set your upper limit lower because of aforementioned reason 😂



  • Registered Users Posts: 226 ✭✭insular1


    Solved this in case it happens to anyone else it was because I was running the new software on the old version of the JKBMS app. Updated the app and all working fine now. Also tested the parallel functioning and works great except for the buggy PC software which displays the wrong values but reports the correct ones to the inverter as per Andy's video.


    Also tried to get it working with the Pylon LV setting on the Solis inverter but even with the updated firmware I am still getting BatName Fail error. Switched back to Used Defined and it works well.



  • Registered Users Posts: 4 WoodpeckerCZ


    Glad to see more people are building DIY batteries.

    Does anyone here have the ZKE 40A tester by any chance ?

    I build my 24V battery in September and it's been in use since mid October, so far so good.

    I used the 200A JKBMS and QSO 280Ah grade B.

    I can pull around 255AH from it on current settings, but would like to do a proper test on individual cells.

    Thx



  • Advertisement
  • Registered Users Posts: 3 Dodita2023


    Hello there,

    Does anyone have the new v14.19 version of firmware for JK-PB2A16S20P to share, please?

    Thank you!



  • Registered Users Posts: 2,230 ✭✭✭SD_DRACULA


    Wasn't aware v19 is out, you can find up to v14.17 here: https://drive.google.com/drive/folders/1RsZvSsntvQqFDYC1oDibYVv18V35xeoB



  • Registered Users Posts: 3 Dodita2023


    Thank you very much, but I already got V14. 17.


    I quote from Andy's community:

    "There are a new update 14.19 already

    -V14.17 Upgrade logs

    1.Fixed a bug where parameters were lost after BMS restart. The bug is caused by a logical error in the parameter entered by the user.

    2.Change the default configuration parameters to LTO to improve security.

    2.Optimized JKBMS Modbus protocol, added RCV RFV register support. The protocol must use the PC software version V2.5.0.

    3.Fixed the Bug that the hardware version may be incorrect in the device information.

    4.Add battery low temperature alarm to dry triggers.

    -@2024-01-09 by JKBMS


    -V14.18 Upgrade logs

    1.Fix a bug, time calibration may fail.

    -@2024-01-12 by JKBMS


    -V14.19 Upgrade logs

    1.Fix a bug, parameters (RFV Time) Storage failure.

    -@2024-01-12 by JKBMS



  • Registered Users Posts: 429 ✭✭jasgrif11


    I noticed two neat settings with the standard black JK from Andys video

    SOC-100% Volt(V)

    SOC-0% Volt(V)

    I assume this allows you to set a more accurate battery percentage as its now associated with the actual battery voltage.

    It doesn’t sound like there is or will be a firmware upgrade for these settings (unless on the newer JK), but standard models ordered going forward will have it.

    Has anyone ordered a standard JK and used this setting, any comments as to its accuracy and usefulness?



  • Registered Users Posts: 3 Dodita2023


    This morning I updated my JK-PB2A16S20P, from V14.13 to V14.19 directly. Unfortunately, the only thing I needed and the reason for this update - Dry 1 or dry 2 trigger for "battery under (low) temperature" doesn't exist in this version. I need to start heating the battery even when I charge it, and using the heating function of the bms is not ok for me, as it change charging to "off" during heating... The dry contacts were the only solution for me, but I updated for nothing to V14.19, as I don't find this function for "battery under temperature"...

    Post edited by Dodita2023 on


  • Registered Users Posts: 121 ✭✭fael


    For LFP it is notoriously hard to judge the SOC by the voltage. As you can see in this (randomly picked) chart:


    If you want to know the SOC you need to measure exactly how much is going in and how much is going out, this is normally done with a shunt (or coulomb counter). This may or may not be built into a BMS. I don't have a JK BMS so I'm not sure if it has one or not.

    But definitely don't just judge the capacity by voltage if you want an accurate SOC.


    Edit: Since the BMS has a maximum Amperage maybe it does have a shunt built in. I guess the maximum amperage is there because the current is routed through the BMS itself and therefore it should be able to calculate it?



  • Registered Users Posts: 64,791 ✭✭✭✭unkel


    @fael - "For LFP it is notoriously hard to judge the SOC by the voltage"

    That's the one major advantage that sodium batteries have over LiFePO4. The voltage range is huge and the charging curve is mostly a fixed angle, so very easy to accurately judge SOC by the voltage

    The major drawback is that none of our hardware can work with sodium batteries for that very reason. We need new inverters, BMS, etc. And the expected pricing is lagging behind. It will be several years - I'd say 5 or so - before an end consumer will be able to get a kWh of sodium battery shipped to their home for significantly cheaper than the €60 + VAT per kWh we pay now to the likes of NKON



  • Registered Users Posts: 121 ✭✭fael


    How do you find the JK BMS in general? I just received the new envision cells that I'll rebuilt my own battery with. I'm building a new battery for my dad and need a BMS for that, would you recommend the JK BMS? He's in a different country so it needs to be set & forget and/or I need to be able to login from abroad using HA or similar.



  • Moderators, Home & Garden Moderators Posts: 5,800 Mod ✭✭✭✭graememk


    Nearly all BMS need a shunt or current meter of some point.

    The 100% and 0% voltages do make sense in trying to estimate the battery capacity.

    If cells are at 3.65 = 100% if cells are at 2.5v =0%

    Count the ah for everything in-between



  • Registered Users Posts: 64,791 ✭✭✭✭unkel


    It's in a league of its own amongst cheap BMS. Does what it says on the tin, active balancing, temp control, CAN comms, easy phone app, easy setup, everything just works and is easy to understand.

    You'd need to spend a 4 figure sum to get something that is better.



  • Advertisement
  • Registered Users Posts: 2,230 ✭✭✭SD_DRACULA


    Not sure if we can pin this post or something similar but it might help folk getting the live data from the JKBMSes and connecting it to Home Assistant (using the new inverter type myself, but works with older models also)

    There are two integrations that can be used (probably more) https://github.com/syssi/esphome-jk-bms and https://github.com/fl4p/batmon-ha and they both connect via bluetooth (creating a BT proxy using a cheap esp32 board works best)

    I prefer the former as this one also lets you change things like cell voltage limits and then charge/discharge/balance and float mode (coming soon)

    You can also connect directly to the BMS via uart/esphome and skip the bluetooth part.

    Basically just drop this into your eshome device yaml, change it with your wifi details and the MAC address of the bms and the esp board you're using:

    substitutions:
      name: jk-bms
      device_description: "Monitor and control a JK-BMS via bluetooth"
      external_components_source: github://syssi/esphome-jk-bms@main
      mac_address: C8:47:80:07:A9:8A
      # Defaults to "JK02" (hardware version >= 6.0 and < 11.0)
      # Please use "JK02_32S" if you own a new JK-BMS >= hardware version 11.0 (f.e. JK-B2A8S20P hw 11.XW, sw 11.26)
      # Please use "JK04" if you have some old JK-BMS <= hardware version 3.0 (f.e. JK-B2A16S hw 3.0, sw. 3.3.0)
      protocol_version: JK02_32S
    
    
    esphome:
      name: ${name}
      comment: ${device_description}
      project:
        name: "syssi.esphome-jk-bms"
        version: 1.5.0
    
    
    esp32:
      board: az-delivery-devkit-v4
      framework:
        type: esp-idf
    
    
    external_components:
      - source: ${external_components_source}
        refresh: 0s
    
    
    wifi:
      ssid: !secret attic_ssid
      password: !secret attic_pw
    
    
    # Enable Home Assistant API
    api:
      encryption:
        key: "something-super-secure"
    
    
    ota:
    
    
    logger:
      level: DEBUG
    
    
    esp32_ble_tracker:
      on_ble_advertise:
        then:
          - lambda: |-
              if (x.get_name().rfind("JK-", 0) == 0) {
                ESP_LOGI("ble_adv", "New JK-BMS found");
                ESP_LOGI("ble_adv", "  Name: %s", x.get_name().c_str());
                ESP_LOGI("ble_adv", "  MAC address: %s", x.address_str().c_str());
                ESP_LOGD("ble_adv", "  Advertised service UUIDs:");
                for (auto uuid : x.get_service_uuids()) {
                  ESP_LOGD("ble_adv", "    - %s", uuid.to_string().c_str());
                }
              }
    
    
    ble_client:
      - mac_address: ${mac_address}
        id: client0
    
    
    jk_bms_ble:
      - ble_client_id: client0
        protocol_version: ${protocol_version}
        throttle: 5s
        id: bms0
    
    
    binary_sensor:
      - platform: jk_bms_ble
        balancing:
          name: "${name} balancing"
        charging:
          name: "${name} charging"
        discharging:
          name: "${name} discharging"
        online_status:
          name: "${name} online status"
    
    
    button:
      - platform: jk_bms_ble
        retrieve_settings:
          name: "${name} retrieve settings"
        retrieve_device_info:
          name: "${name} retrieve device info"
    
    
    number:
      - platform: jk_bms_ble
        jk_bms_ble_id: bms0
        balance_trigger_voltage:
          name: "${name} balance trigger voltage"
        cell_count:
          name: "${name} cell count"
        total_battery_capacity:
          name: "${name} total battery capacity"
        cell_voltage_overvoltage_protection:
          name: "${name} cell voltage overvoltage protection"
        cell_voltage_overvoltage_recovery:
          name: "${name} cell voltage overvoltage recovery"
        cell_voltage_undervoltage_protection:
          name: "${name} cell voltage undervoltage protection"
        cell_voltage_undervoltage_recovery:
          name: "${name} cell voltage undervoltage recovery"
        balance_starting_voltage:
          name: "${name} balance starting voltage"
        voltage_calibration:
          name: "${name} voltage calibration"
        current_calibration:
          name: "${name} current calibration"
        power_off_voltage:
          name: "${name} power off voltage"
        max_balance_current:
          name: "${name} max balance current"
        max_charge_current:
          name: "${name} max charge current"
        max_discharge_current:
          name: "${name} max discharge current"
    
    
    sensor:
      - platform: jk_bms_ble
        jk_bms_ble_id: bms0
        min_cell_voltage:
          name: "${name} min cell voltage"
        max_cell_voltage:
          name: "${name} max cell voltage"
        min_voltage_cell:
          name: "${name} min voltage cell"
        max_voltage_cell:
          name: "${name} max voltage cell"
        delta_cell_voltage:
          name: "${name} delta cell voltage"
        average_cell_voltage:
          name: "${name} average cell voltage"
        cell_voltage_1:
          name: "${name} cell voltage 1"
        cell_voltage_2:
          name: "${name} cell voltage 2"
        cell_voltage_3:
          name: "${name} cell voltage 3"
        cell_voltage_4:
          name: "${name} cell voltage 4"
        cell_voltage_5:
          name: "${name} cell voltage 5"
        cell_voltage_6:
          name: "${name} cell voltage 6"
        cell_voltage_7:
          name: "${name} cell voltage 7"
        cell_voltage_8:
          name: "${name} cell voltage 8"
        cell_voltage_9:
          name: "${name} cell voltage 9"
        cell_voltage_10:
          name: "${name} cell voltage 10"
        cell_voltage_11:
          name: "${name} cell voltage 11"
        cell_voltage_12:
          name: "${name} cell voltage 12"
        cell_voltage_13:
          name: "${name} cell voltage 13"
        cell_voltage_14:
          name: "${name} cell voltage 14"
        cell_voltage_15:
          name: "${name} cell voltage 15"
        cell_voltage_16:
          name: "${name} cell voltage 16"
        cell_voltage_17:
          name: "${name} cell voltage 17"
        cell_voltage_18:
          name: "${name} cell voltage 18"
        cell_voltage_19:
          name: "${name} cell voltage 19"
        cell_voltage_20:
          name: "${name} cell voltage 20"
        cell_voltage_21:
          name: "${name} cell voltage 21"
        cell_voltage_22:
          name: "${name} cell voltage 22"
        cell_voltage_23:
          name: "${name} cell voltage 23"
        cell_voltage_24:
          name: "${name} cell voltage 24"
        cell_resistance_1:
          name: "${name} cell resistance 1"
        cell_resistance_2:
          name: "${name} cell resistance 2"
        cell_resistance_3:
          name: "${name} cell resistance 3"
        cell_resistance_4:
          name: "${name} cell resistance 4"
        cell_resistance_5:
          name: "${name} cell resistance 5"
        cell_resistance_6:
          name: "${name} cell resistance 6"
        cell_resistance_7:
          name: "${name} cell resistance 7"
        cell_resistance_8:
          name: "${name} cell resistance 8"
        cell_resistance_9:
          name: "${name} cell resistance 9"
        cell_resistance_10:
          name: "${name} cell resistance 10"
        cell_resistance_11:
          name: "${name} cell resistance 11"
        cell_resistance_12:
          name: "${name} cell resistance 12"
        cell_resistance_13:
          name: "${name} cell resistance 13"
        cell_resistance_14:
          name: "${name} cell resistance 14"
        cell_resistance_15:
          name: "${name} cell resistance 15"
        cell_resistance_16:
          name: "${name} cell resistance 16"
        cell_resistance_17:
          name: "${name} cell resistance 17"
        cell_resistance_18:
          name: "${name} cell resistance 18"
        cell_resistance_19:
          name: "${name} cell resistance 19"
        cell_resistance_20:
          name: "${name} cell resistance 20"
        cell_resistance_21:
          name: "${name} cell resistance 21"
        cell_resistance_22:
          name: "${name} cell resistance 22"
        cell_resistance_23:
          name: "${name} cell resistance 23"
        cell_resistance_24:
          name: "${name} cell resistance 24"
        total_voltage:
          name: "${name} total voltage"
        current:
          name: "${name} current"
        power:
          name: "${name} power"
        charging_power:
          name: "${name} charging power"
        discharging_power:
          name: "${name} discharging power"
        temperature_sensor_1:
          name: "${name} temperature sensor 1"
        temperature_sensor_2:
          name: "${name} temperature sensor 2"
        power_tube_temperature:
          name: "${name} power tube temperature"
        state_of_charge:
          name: "${name} state of charge"
        capacity_remaining:
          name: "${name} capacity remaining"
        total_battery_capacity_setting:
          name: "${name} total battery capacity setting"
        charging_cycles:
          name: "${name} charging cycles"
        total_charging_cycle_capacity:
          name: "${name} total charging cycle capacity"
        total_runtime:
          name: "${name} total runtime"
        balancing_current:
          name: "${name} balancing current"
        errors_bitmask:
          name: "${name} errors bitmask"
    
    
    switch:
      - platform: jk_bms_ble
        charging:
          name: "${name} charging"
        discharging:
          name: "${name} discharging"
        balancer:
          name: "${name} balancer"
    
    
      - platform: ble_client
        ble_client_id: client0
        name: "${name} enable bluetooth connection"
    
    
    text_sensor:
      - platform: jk_bms_ble
        errors:
          name: "${name} errors"
        total_runtime_formatted:
          name: "${name} total runtime formatted"
    
    Post edited by SD_DRACULA on


  • Registered Users Posts: 429 ✭✭jasgrif11


    For those of us not on the inverter Jk-BMS, Andy posted a video highlighting a neat trick to set the 100% state of charge when fully charged according to the voltage you set (with no OVP).




Advertisement