Skip to content

Commit

Permalink
Test LifePower multi battery fix
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-manuel committed Oct 7, 2024
1 parent 1c4e576 commit 30cecf5
Showing 1 changed file with 50 additions and 13 deletions.
63 changes: 50 additions & 13 deletions etc/dbus-serialbattery/bms/eg4_lifepower.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,13 @@ def __init__(self, port, baud, address):
super(EG4_Lifepower, self).__init__(port, baud, address)
self.type = self.BATTERYTYPE
self.address = address
self.command_general = b"\x7E" + address + b"\x01\x00\xFE\x0D"
self.command_general = (
b"\x7E" + address + b"\x01\x00" + self.get_command_general_part() + b"\x0D"
)
self.command_hardware_version = b"\x7E" + address + b"\x42\x00\xFC\x0D"
self.command_firmware_version = b"\x7E" + address + b"\x33\x00\xFE\x0D"
self.command_firmware_version = (
b"\x7E" + address + b"\x33\x00" + self.get_command_general_part() + b"\x0D"
)

balancing = 0
BATTERYTYPE = "EG4 Lifepower"
Expand Down Expand Up @@ -55,11 +59,45 @@ def test_connection(self):

return result

def get_command_general_part(self):
"""
Get the second last byte of the command_general command
0x01:\x7E\x01\x01\x00\xFE\x0D
0x02:\x7E\x02\x01\x00\xFC\x0D
0x03:\x7E\x03\x01\x00\xFE\x0D
0x04:\x7E\x04\x01\x00\xF8\x0D
0x05:\x7E\x05\x01\x00\xFE\x0D
0x06:\x7E\x06\x01\x00\xFC\x0D
0x07:\x7E\x07\x01\x00\xFE\x0D
0x08:\x7E\x08\x01\x00\xF0\x0D
0x09:\x7E\x09\x01\x00\xFE\x0D
0x0A:\x7E\x0A\x01\x00\xFC\x0D
0x0B:\x7E\x0B\x01\x00\xFE\x0D
0x0C:\x7E\x0C\x01\x00\xF8\x0D
0x0D:\x7E\x0D\x01\x00\xFE\x0D
0x0E:\x7E\x0E\x01\x00\xFC\x0D
"""
if (
self.address == b"\x02"
or self.address == b"\x06"
or self.address == b"\x0A"
or self.address == b"\x0E"
):
return b"\xFC"
elif self.address == b"\x04" or self.address == b"\x0C":
return b"\xF8"
elif self.address == b"\x08":
return b"\xF0"
else:
return b"\xFE"

def get_settings(self):
# After successful connection get_settings() will be called to set up the battery
# Set the current limits, populate cell count, etc
# Return True if success, False for failure
result = False
result_2 = False

hardware_version = self.read_serial_data_eg4(self.command_hardware_version)
if hardware_version:
Expand All @@ -74,23 +112,22 @@ def get_settings(self):

result = True

if result:
version = self.read_serial_data_eg4(self.command_firmware_version)
if version:
self.version = re.sub(
r"[^a-zA-Z0-9-._ ]",
"",
str(version, encoding="utf-8", errors="ignore"),
)
logger.info("Firmware Version:" + self.version)
version = self.read_serial_data_eg4(self.command_firmware_version)
if version:
self.version = re.sub(
r"[^a-zA-Z0-9-._ ]",
"",
str(version, encoding="utf-8", errors="ignore"),
)
logger.info("Firmware Version:" + self.version)

result = True
result_2 = True

# polling every second seems to create some error messages
# change to 2 seconds
self.poll_interval = 2000

return result
return result or result_2

def refresh_data(self):
# call all functions that will refresh the battery data.
Expand Down

0 comments on commit 30cecf5

Please sign in to comment.