Skip to content

Commit

Permalink
Make things configurable (#412)
Browse files Browse the repository at this point in the history
* bugfixes in midpoint calculation

* publish constants to dbus

* black and flake8

* update documentation

* Fixes to cell voltage, temp and version (#390)
(cherry picked from commit 3b68ea6)

* Automate release (#394)

* automate release generation

* make shell scripts +x

* add yaml

* rely on gh line ending conventions, simplify buildfiles.lst

* add gitattributes

* set file properties for run scripts to +x

Co-authored-by: Philip Puetsch <[email protected]>

(cherry picked from commit ce601fb)

* configure limits as fractions

* lint

* cleanup

* fixes

* remove development logging

Co-authored-by: Philip Puetsch <[email protected]>
Co-authored-by: pchiquit <[email protected]>
  • Loading branch information
3 people authored Jan 14, 2023
1 parent 993b37f commit ffdd8ec
Show file tree
Hide file tree
Showing 4 changed files with 292 additions and 93 deletions.
4 changes: 2 additions & 2 deletions etc/dbus-serialbattery/battery.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
from typing import Union, Tuple
from typing import Union, Tuple, List

from utils import logger
import utils
Expand Down Expand Up @@ -76,7 +76,7 @@ def __init__(self, port, baud, address):
self.temp_sensors = None
self.temp1 = None
self.temp2 = None
self.cells = []
self.cells: List[Cell] = []
self.control_charging = None
self.control_voltage = None
self.allow_max_voltage = True
Expand Down
17 changes: 12 additions & 5 deletions etc/dbus-serialbattery/dbus-serialbattery.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
# from ve_utils import exit_on_error

from dbushelper import DbusHelper
from utils import DRIVER_VERSION, DRIVER_SUBVERSION, logger
from utils import logger
import utils
from battery import Battery
from lltjbd import LltJbd
from daly import Daly
Expand All @@ -28,7 +29,7 @@
from ecs import Ecs
from lifepower import Lifepower

battery_types = [
supported_bms_types = [
{"bms": LltJbd, "baud": 9600},
{"bms": Ant, "baud": 19200},
{"bms": Daly, "baud": 9600, "address": b"\x40"},
Expand All @@ -40,7 +41,11 @@
{"bms": Renogy, "baud": 9600, "address": b"\xF7"},
{"bms": Ecs, "baud": 19200},
]

expected_bms_types = [
battery_type
for battery_type in supported_bms_types
if battery_type["bms"].__name__ == utils.BMS_TYPE or utils.BMS_TYPE == ""
]

logger.info("Starting dbus-serialbattery")

Expand All @@ -60,7 +65,7 @@ def get_battery(_port) -> Union[Battery, None]:
count = 3
while count > 0:
# create a new battery object that can read the battery and run connection test
for test in battery_types:
for test in expected_bms_types:
logger.info("Testing " + test["bms"].__name__)
batteryClass = test["bms"]
baud = test["baud"]
Expand All @@ -86,7 +91,9 @@ def get_port() -> str:
logger.info("No Port needed")
return "/dev/tty/USB9"

logger.info("dbus-serialbattery v" + str(DRIVER_VERSION) + DRIVER_SUBVERSION)
logger.info(
"dbus-serialbattery v" + str(utils.DRIVER_VERSION) + utils.DRIVER_SUBVERSION
)

port = get_port()
battery: Battery = get_battery(port)
Expand Down
138 changes: 138 additions & 0 deletions etc/dbus-serialbattery/default_config.ini
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
[DEFAULT]
LINEAR_LIMITATION_ENABLE = False

; battery Current limits
MAX_BATTERY_CHARGE_CURRENT = 70.0
MAX_BATTERY_DISCHARGE_CURRENT = 90.0

; -------- Cell Voltage limitation ---------
; Description:
; Maximal charge / discharge current will be in-/decreased depending on min- and max-cell-voltages
; Example: 18cells * 3.55V/cell = 63.9V max charge voltage. 18 * 2.7V = 48,6V min discharge voltage
; ... but 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
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 ---------
; 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
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,.2,.3,.4,1,1,0

; if the cell voltage reaches 3.55V, then reduce current battery-voltage by 0.01V
; if the cell voltage goes over 3.6V, then the maximum penalty will not be exceeded
; there will be a sum of all penalties for each cell, which exceeds the limits
PENALTY_AT_CELL_VOLTAGE = 3.45,3.55,3.6
; this voltage will be subtracted
PENALTY_BATTERY_VOLTAGE = 0.01,1.0,2.0


; -------- SOC limitation ---------
; Description:
; Maximal charge / discharge current will be increased / decreased depending on State of Charge, see CC_SOC_LIMIT1 etc.
; The State of Charge (SoC) charge / discharge current will be in-/decreased depending on SOC.
; Example: 16cells * 3.45V/cell = 55,2V max charge voltage. 16*2.9V = 46,4V min discharge voltage
; Cell min/max voltages - used with the cell count to get the min/max battery voltage
MIN_CELL_VOLTAGE = 2.9
MAX_CELL_VOLTAGE = 3.45
FLOAT_CELL_VOLTAGE = 3.35
MAX_VOLTAGE_TIME_SEC = 900
SOC_LEVEL_TO_RESET_VOLTAGE_LIMIT = 90

; Charge current control management enable (True/False).
CCCM_SOC_ENABLE = True
; Discharge current control management enable (True/False).
DCCM_SOC_ENABLE = True

; 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

; Charge voltage control management enable (True/False).
CVCM_ENABLE = False

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

; soc low levels
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

; TIME TO SOC settings [Valid values 0-100, but I don't recommend more that 20 intervals]
; Set of SoC percentages to report on dbus. The more you specify the more it will impact system performance.
; TIME_TO_SOC_POINTS = [100, 95, 90, 85, 80, 75, 70, 65, 60, 55, 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0]
; Every 5% SoC
; TIME_TO_SOC_POINTS = [100, 95, 90, 85, 75, 50, 25, 20, 10, 0]
; No data set to disable
TIME_TO_SOC_POINTS =
; Specify TimeToSoc value type: [Valid values 1,2,3]
; TIME_TO_SOC_VALUE_TYPE = 1 ; Seconds
; TIME_TO_SOC_VALUE_TYPE = 2 ; Time string HH:MN:SC
; Both Seconds and time str "<seconds> [days, HR:MN:SC]"
TIME_TO_SOC_VALUE_TYPE = 3
; Specify how many loop cycles between each TimeToSoc updates
TIME_TO_SOC_LOOP_CYCLES = 5
; 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


; 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

; Settings for ESC GreenMeter and Lipro devices
GREENMETER_ADDRESS = 1
LIPRO_START_ADDRESS = 2
LIPRO_END_ADDRESS = 4
LIPRO_CELL_COUNT = 15

PUBLISH_CONFIG_VALUES = 1

BMS_TYPE =
Loading

0 comments on commit ffdd8ec

Please sign in to comment.