Skip to content

Commit a47b19e

Browse files
authored
Merge pull request #7 from bbr111/dev
Fix error HVM Tower not shown
2 parents 1bfec84 + 849b785 commit a47b19e

2 files changed

Lines changed: 61 additions & 50 deletions

File tree

bydhvs/__init__.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def __init__(self, ip_address: str, port: int = 8080) -> None:
7777
self.hvs_eta = 0.0
7878
self.hvs_batt_type_from_serial = ""
7979
self.hvs_batt_type = ""
80+
self.hvs_batt_type_string = ""
8081
self.hvs_inv_type = ""
8182
self.hvs_num_cells = 0
8283
self.hvs_num_temps = 0
@@ -369,12 +370,13 @@ def parse_packet2(self, data: bytes) -> None:
369370

370371
# Map battery type to module and cell counts
371372
batt_type_map = {
372-
0: {'cell_count': 0, 'temp_count': 0},
373-
1: {'cell_count': 16, 'temp_count': 8},
374-
2: {'cell_count': 32, 'temp_count': 12},
373+
0: {'string': 'LVM', 'cell_count': 0, 'temp_count': 0},
374+
1: {'string': 'HVM', 'cell_count': 16, 'temp_count': 8},
375+
2: {'string': 'HVS', 'cell_count': 32, 'temp_count': 12},
375376
}
376377

377378
batt_info = batt_type_map.get(self.hvs_batt_type, {})
379+
self.hvs_batt_type_string = batt_info.get('string', '')
378380
self.hvs_module_cell_count = batt_info.get('cell_count', 0)
379381
self.hvs_module_cell_temp_count = batt_info.get('temp_count', 0)
380382
self.hvs_num_cells = self.hvs_modules * self.hvs_module_cell_count
@@ -661,7 +663,11 @@ async def state10_send_request8(self) -> None:
661663
if self.hvs_num_cells > 128:
662664
self.my_state = 11
663665
else:
664-
self.my_state = 0 # Polling completed
666+
if self.current_tower + 1 < self.hvs_towers:
667+
self.current_tower += 1
668+
self.my_state = 5
669+
else:
670+
self.my_state = 0 # Polling completed
665671
else:
666672
_LOGGER.error("Invalid or no data received in state 10")
667673
self.my_state = 0
@@ -769,6 +775,7 @@ def get_data(self) -> dict:
769775
"eta": self.hvs_eta,
770776
"battery_type_from_serial": self.hvs_batt_type_from_serial,
771777
"battery_type": self.hvs_batt_type,
778+
"battery_type_string": self.hvs_batt_type_string,
772779
"inverter_type": self.hvs_inv_type_string,
773780
"number_of_cells": self.hvs_num_cells,
774781
"number_of_temperatures": self.hvs_num_temps,

example.py

Lines changed: 50 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ async def main():
77
"""Main func"""
88
# Replace with IP address of your BYD HVS battery system
99
battery_ip = '192.168.16.254'
10-
battery = BYDHVS(ip_address=battery_ip)
10+
battery_port = '8080'
11+
12+
battery = BYDHVS(ip_address=battery_ip, port=battery_port)
1113

1214
try:
1315
# Perform the polling to retrieve data
@@ -18,34 +20,35 @@ async def main():
1820

1921
# Print the retrieved data
2022
print("Battery Data:")
21-
print(f"Serial Number : {data['serial_number']}")
22-
print(f"BMU Firmware : {data['bmu_firmware']}")
23-
print(f"BMU Firmware_A : {data['bmu_firmware_a']}")
24-
print(f"BMU Firmware_B : {data['bmu_firmware_b']}")
25-
print(f"BMS Firmware : {data['bms_firmware']}")
26-
print(f"Modules : {data['modules']}")
27-
print(f"ModuleCellCount : {data['module_cell_count']}")
28-
print(f"ModuleCellTempCount: {data['module_cell_temp_count']}")
29-
print(f"Towers : {data['towers']}")
30-
print(f"Grid Type : {data['grid_type']}")
31-
print(f"SOC : {data['soc']}%")
32-
print(f"Max Voltage : {data['max_voltage']} V")
33-
print(f"Min Voltage : {data['min_voltage']} V")
34-
print(f"SOH : {data['soh']}%")
35-
print(f"Current : {data['current']} A")
36-
print(f"Battery Voltage : {data['battery_voltage']} V")
37-
print(f"Max Temperature : {data['max_temperature']} °C")
38-
print(f"Min Temperature : {data['min_temperature']} °C")
39-
print(f"Battery Temperature: {data['battery_temperature']} °C")
40-
print(f"Voltage Difference : {data['voltage_difference']} V")
41-
print(f"Power : {data['power']} W")
42-
print(f"Error Number : {data['error_number']}")
43-
print(f"Error String : {data['error_string']}")
44-
print(f"Charge Total : {data['charge_total']} Ah")
45-
print(f"Discharge Total : {data['discharge_total']} Ah")
46-
print(f"ETA : {data['eta']}")
47-
print(f"Battery Type : {data['battery_type']}")
48-
print(f"Inverter Type : {data['inverter_type']}")
23+
print(f"Serial Number : {data['serial_number']}")
24+
print(f"BMU Firmware : {data['bmu_firmware']}")
25+
print(f"BMU Firmware_A : {data['bmu_firmware_a']}")
26+
print(f"BMU Firmware_B : {data['bmu_firmware_b']}")
27+
print(f"BMS Firmware : {data['bms_firmware']}")
28+
print(f"Modules : {data['modules']}")
29+
print(f"ModuleCellCount : {data['module_cell_count']}")
30+
print(f"ModuleCellTempCount : {data['module_cell_temp_count']}")
31+
print(f"Towers : {data['towers']}")
32+
print(f"Grid Type : {data['grid_type']}")
33+
print(f"SOC : {data['soc']}%")
34+
print(f"Max Voltage : {data['max_voltage']} V")
35+
print(f"Min Voltage : {data['min_voltage']} V")
36+
print(f"SOH : {data['soh']}%")
37+
print(f"Current : {data['current']} A")
38+
print(f"Battery Voltage : {data['battery_voltage']} V")
39+
print(f"Max Temperature : {data['max_temperature']} °C")
40+
print(f"Min Temperature : {data['min_temperature']} °C")
41+
print(f"Battery Temperature : {data['battery_temperature']} °C")
42+
print(f"Voltage Difference : {data['voltage_difference']} V")
43+
print(f"Power : {data['power']} W")
44+
print(f"Error Number : {data['error_number']}")
45+
print(f"Error String : {data['error_string']}")
46+
print(f"Charge Total : {data['charge_total']} Ah")
47+
print(f"Discharge Total : {data['discharge_total']} Ah")
48+
print(f"ETA : {data['eta']}")
49+
print(f"Battery Type : {data['battery_type']}")
50+
print(f"Battery Type String : {data['battery_type_string']}")
51+
print(f"Inverter Type : {data['inverter_type']}")
4952
for idx, tower in enumerate(data['tower_attributes']):
5053
print(f"\nTower {idx + 1}:")
5154
print(f""" Max Cell Voltage (mV): {
@@ -56,26 +59,27 @@ async def main():
5659
tower.get('max_cell_voltage_cell')}""")
5760
print(f""" Min Cell Voltage Cell: No. {
5861
tower.get('min_cell_voltage_cell')}""")
59-
print(f" Max Cell Temp : {tower.get('max_cell_temp')}°C")
60-
print(f" Min Cell Temp : {tower.get('min_cell_temp')}°C")
61-
print(f""" Max Cell Temp Cell : No.{
62+
print(f" Max Cell Temp : {tower.get('max_cell_temp')}°C")
63+
print(f" Min Cell Temp : {tower.get('min_cell_temp')}°C")
64+
print(f""" Max Cell Temp Cell : No.{
6265
tower.get('max_cell_temp_cell')}""")
63-
print(f""" Min Cell Temp Cell : No.{
66+
print(f""" Min Cell Temp Cell : No.{
6467
tower.get('min_cell_temp_cell')}""")
65-
print(f" Balancing Status : {tower.get('balancing_status')}")
66-
print(f" Balancing Count : {tower.get('balancing_count')}")
67-
print(f" Total Charge : {tower['charge_total']}")
68-
print(f" Discharge Total : {tower.get('discharge_total')}")
69-
print(f" ETA : {tower.get('eta')}")
70-
print(f" Battery Volt : {tower.get('battery_volt')}")
71-
print(f" Output Volt : {tower.get('out_volt')}")
72-
print(f""" SOCDiagnosis : {
68+
print(f" Balancing Status : {tower.get('balancing_status')}")
69+
print(f" Balancing Count : {tower.get('balancing_count')}")
70+
print(f" Total Charge : {tower.get('charge_total')}")
71+
print(f" Discharge Total : {tower.get('discharge_total')}")
72+
print(f" ETA : {tower.get('eta')}")
73+
print(f" Battery Volt : {tower.get('battery_volt')}")
74+
print(f" Output Volt : {tower.get('out_volt')}")
75+
print(f""" SOCDiagnosis : {
7376
tower.get('hvs_soc_diagnosis')}%""")
74-
print(f" State of Health : {tower.get('soh')}%")
75-
print(f" State : {tower.get('state')}")
76-
print(f" State_String : {tower.get('state_string')}")
77-
print(f" Cell Voltages : {tower.get('cell_voltages')}")
78-
print(f" Cell Temperatures : {tower.get('cell_temperatures')}")
77+
print(f" State of Health : {tower.get('soh')}%")
78+
print(f" State : {tower.get('state')}")
79+
print(f" State_String : {tower.get('state_string')}")
80+
print(f" Cell Voltages : {tower.get('cell_voltages')}")
81+
print(f""" Cell Temperatures : {
82+
tower.get('cell_temperatures')}""")
7983

8084
except BYDHVSError as e:
8185
print(f"An error occurred: {e}")

0 commit comments

Comments
 (0)