Python 3 port
This commit is contained in:
parent
bb6151300f
commit
a7daaf77b4
1 changed files with 75 additions and 63 deletions
|
|
@ -13,6 +13,7 @@ import serial
|
|||
import math
|
||||
import struct
|
||||
import decimal
|
||||
import codecs
|
||||
|
||||
# setup timezone
|
||||
os.environ['TZ'] = 'Europe/Berlin'
|
||||
|
|
@ -730,8 +731,9 @@ def debug_packet(packet):
|
|||
|
||||
string_output = ""
|
||||
for packet_byte in packet:
|
||||
byte_string = str(ord(packet_byte)) + " [" + packet_byte.encode("hex") + "] "
|
||||
string_output = string_output + byte_string
|
||||
# print(packet_byte)
|
||||
byte_string = str((packet_byte)) + " [" + hex(packet_byte) + "] "
|
||||
string_output = string_output + byte_string
|
||||
logging.debug(string_output);
|
||||
|
||||
|
||||
|
|
@ -742,7 +744,7 @@ def get_header_position(packet):
|
|||
pos_iterator = -1
|
||||
for packet_byte in packet:
|
||||
pos_iterator += 1
|
||||
if ((ord(previous_packet_byte) == PACKET_HEADER) and (ord(packet_byte) == PACKET_HEADER)):
|
||||
if (((previous_packet_byte) == PACKET_HEADER) and ((packet_byte) == PACKET_HEADER)):
|
||||
break
|
||||
previous_packet_byte = packet_byte
|
||||
|
||||
|
|
@ -790,12 +792,12 @@ def parse_packet(packet):
|
|||
packet = packet[(header_position - 1):]
|
||||
|
||||
if (len(packet) >= 4):
|
||||
if ((ord(packet[0]) == PACKET_HEADER) and (ord(packet[1]) == PACKET_HEADER)):
|
||||
packet_length = ord(packet[3])
|
||||
if (((packet[0]) == PACKET_HEADER) and ((packet[1]) == PACKET_HEADER)):
|
||||
packet_length = (packet[3])
|
||||
logging.debug("Packet Length [" + str (packet_length) + " bytes]")
|
||||
debug_packet(packet)
|
||||
|
||||
if (ord(packet[2]) == PACKET_STATUS_BMS):
|
||||
if ((packet[2]) == PACKET_STATUS_BMS):
|
||||
|
||||
if (len(packet) < PACKET_LENGTH_STATUS_BMS[0]):
|
||||
logging.debug("Packet Status BMS too short, skip")
|
||||
|
|
@ -805,12 +807,12 @@ def parse_packet(packet):
|
|||
reset_status_values()
|
||||
|
||||
# checksum value
|
||||
checksum = ord(packet[packet_length-1])
|
||||
checksum = (packet[packet_length-1])
|
||||
checksum_check = 0
|
||||
|
||||
# calculate checksum
|
||||
for i in range(packet_length-1):
|
||||
checksum_check = checksum_check + ord(packet[i])
|
||||
checksum_check = checksum_check + (packet[i])
|
||||
checksum_check = checksum_check % 256
|
||||
logging.debug("Packet Checksum : " + str(checksum) + "|" + str(checksum_check))
|
||||
|
||||
|
|
@ -818,17 +820,17 @@ def parse_packet(packet):
|
|||
if (checksum == checksum_check):
|
||||
|
||||
# charge end voltage
|
||||
BMS_STATUS['bms']['charged_end_voltage']['value'] = get_voltage_value(ord(packet[4]), ord(packet[5]))
|
||||
BMS_STATUS['bms']['charged_end_voltage']['value'] = get_voltage_value((packet[4]), (packet[5]))
|
||||
BMS_STATUS['bms']['charged_end_voltage']['text'] = "{:.2f}".format(BMS_STATUS['bms']['charged_end_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Info/ChargeEndVoltage"] = BMS_STATUS['bms']['charged_end_voltage']['text']
|
||||
dbusservice["/Raw/Info/ChargeEndVoltage"] = BMS_STATUS['bms']['charged_end_voltage']['value']
|
||||
|
||||
# actual current
|
||||
BMS_STATUS['bms']['current']['value'] = get_current_value(ord(packet[7]), ord(packet[8]))
|
||||
BMS_STATUS['bms']['current']['value'] = get_current_value((packet[7]), (packet[8]))
|
||||
|
||||
# charge mode
|
||||
bms_current_mode = ord(packet[6])
|
||||
bms_current_mode = (packet[6])
|
||||
if (bms_current_mode == 0x00):
|
||||
BMS_STATUS['bms']['current_mode']['value'] = 0
|
||||
BMS_STATUS['bms']['current_mode']['text'] = "Discharge"
|
||||
|
|
@ -853,9 +855,9 @@ def parse_packet(packet):
|
|||
dbusservice["/Raw/Info/Current"] = BMS_STATUS['bms']['current']['value']
|
||||
|
||||
# current temperatures
|
||||
BMS_STATUS['bms']['temperature']['sensor_t1']['value'] = get_temperature_value(ord(packet[9]), ord(packet[10]))
|
||||
BMS_STATUS['bms']['temperature']['sensor_t1']['value'] = get_temperature_value((packet[9]), (packet[10]))
|
||||
BMS_STATUS['bms']['temperature']['sensor_t1']['text'] = str(BMS_STATUS['bms']['temperature']['sensor_t1']['value']) + SPECIAL_DISPLAY_SYMBOLS['degree'] + "C"
|
||||
BMS_STATUS['bms']['temperature']['sensor_t2']['value'] = get_temperature_value(ord(packet[11]), ord(packet[12]))
|
||||
BMS_STATUS['bms']['temperature']['sensor_t2']['value'] = get_temperature_value((packet[11]), (packet[12]))
|
||||
BMS_STATUS['bms']['temperature']['sensor_t2']['text'] = str(BMS_STATUS['bms']['temperature']['sensor_t2']['value']) + SPECIAL_DISPLAY_SYMBOLS['degree'] + "C"
|
||||
|
||||
if args.victron:
|
||||
|
|
@ -865,8 +867,8 @@ def parse_packet(packet):
|
|||
dbusservice["/Raw/Info/Temp/Sensor2"] = BMS_STATUS['bms']['temperature']['sensor_t2']['value']
|
||||
|
||||
# soc value
|
||||
BMS_STATUS['bms']['soc']['value'] = ord(packet[13])
|
||||
BMS_STATUS['bms']['soc']['text'] = str(ord(packet[13])) + "%"
|
||||
BMS_STATUS['bms']['soc']['value'] = (packet[13])
|
||||
BMS_STATUS['bms']['soc']['text'] = str((packet[13])) + "%"
|
||||
if args.victron:
|
||||
dbusservice["/Info/Soc"] = BMS_STATUS['bms']['soc']['text']
|
||||
dbusservice["/Raw/Info/Soc"] = BMS_STATUS['bms']['soc']['value']
|
||||
|
|
@ -894,7 +896,7 @@ def parse_packet(packet):
|
|||
# strip packet
|
||||
packet = packet[packet_length:]
|
||||
|
||||
elif (ord(packet[2]) == PACKET_STATUS_CELLS):
|
||||
elif ((packet[2]) == PACKET_STATUS_CELLS):
|
||||
|
||||
if (len(packet) < PACKET_LENGTH_STATUS_CELLS[0]):
|
||||
logging.debug("Packet Status Cells too short, skip")
|
||||
|
|
@ -914,11 +916,11 @@ def parse_packet(packet):
|
|||
logging.debug("Packet Status Cells too short, skip")
|
||||
packet = ""
|
||||
else:
|
||||
checksum = ord(packet[packet_length-1])
|
||||
checksum = (packet[packet_length-1])
|
||||
|
||||
# calculate checksum
|
||||
for i in range(packet_length-1):
|
||||
checksum_check = checksum_check + ord(packet[i])
|
||||
checksum_check = checksum_check + (packet[i])
|
||||
checksum_check = checksum_check % 256
|
||||
logging.debug("Packet Checksum BMS8: " + str(checksum) + "|" + str(checksum_check))
|
||||
|
||||
|
|
@ -929,11 +931,11 @@ def parse_packet(packet):
|
|||
logging.debug("Packet Status Cells too short, skip")
|
||||
packet = ""
|
||||
else:
|
||||
checksum = ord(packet[packet_length-1])
|
||||
checksum = (packet[packet_length-1])
|
||||
|
||||
# calculate checksum
|
||||
for i in range(packet_length-1):
|
||||
checksum_check = checksum_check + ord(packet[i])
|
||||
checksum_check = checksum_check + (packet[i])
|
||||
checksum_check = checksum_check % 256
|
||||
logging.debug("Packet Checksum BMS16: " + str(checksum) + "|" + str(checksum_check))
|
||||
|
||||
|
|
@ -944,11 +946,11 @@ def parse_packet(packet):
|
|||
logging.debug("Packet Status Cells too short, skip")
|
||||
packet = ""
|
||||
else:
|
||||
checksum = ord(packet[packet_length-1])
|
||||
checksum = (packet[packet_length-1])
|
||||
|
||||
# calculate checksum
|
||||
for i in range(packet_length-1):
|
||||
checksum_check = checksum_check + ord(packet[i])
|
||||
checksum_check = checksum_check + (packet[i])
|
||||
checksum_check = checksum_check % 256
|
||||
logging.debug("Packet Checksum BMS24: " + str(checksum) + "|" + str(checksum_check))
|
||||
|
||||
|
|
@ -958,49 +960,49 @@ def parse_packet(packet):
|
|||
|
||||
|
||||
# cell voltages BMS8
|
||||
BMS_STATUS['voltages']['cell1_voltage']['value'] = get_voltage_value(ord(packet[4]), ord(packet[5]))
|
||||
BMS_STATUS['voltages']['cell1_voltage']['value'] = get_voltage_value((packet[4]), (packet[5]))
|
||||
BMS_STATUS['voltages']['cell1_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell1_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell1"] = BMS_STATUS['voltages']['cell1_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell1"] = BMS_STATUS['voltages']['cell1_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell2_voltage']['value'] = get_voltage_value(ord(packet[6]), ord(packet[7]))
|
||||
BMS_STATUS['voltages']['cell2_voltage']['value'] = get_voltage_value((packet[6]), (packet[7]))
|
||||
BMS_STATUS['voltages']['cell2_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell2_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell2"] = BMS_STATUS['voltages']['cell2_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell2"] = BMS_STATUS['voltages']['cell2_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell3_voltage']['value'] = get_voltage_value(ord(packet[8]), ord(packet[9]))
|
||||
BMS_STATUS['voltages']['cell3_voltage']['value'] = get_voltage_value((packet[8]), (packet[9]))
|
||||
BMS_STATUS['voltages']['cell3_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell3_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell3"] = BMS_STATUS['voltages']['cell3_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell3"] = BMS_STATUS['voltages']['cell3_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell4_voltage']['value'] = get_voltage_value(ord(packet[10]), ord(packet[11]))
|
||||
BMS_STATUS['voltages']['cell4_voltage']['value'] = get_voltage_value((packet[10]), (packet[11]))
|
||||
BMS_STATUS['voltages']['cell4_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell4_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell4"] = BMS_STATUS['voltages']['cell4_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell4"] = BMS_STATUS['voltages']['cell4_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell5_voltage']['value'] = get_voltage_value(ord(packet[12]), ord(packet[13]))
|
||||
BMS_STATUS['voltages']['cell5_voltage']['value'] = get_voltage_value((packet[12]), (packet[13]))
|
||||
BMS_STATUS['voltages']['cell5_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell5_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell5"] = BMS_STATUS['voltages']['cell5_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell5"] = BMS_STATUS['voltages']['cell5_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell6_voltage']['value'] = get_voltage_value(ord(packet[14]), ord(packet[15]))
|
||||
BMS_STATUS['voltages']['cell6_voltage']['value'] = get_voltage_value((packet[14]), (packet[15]))
|
||||
BMS_STATUS['voltages']['cell6_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell6_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell6"] = BMS_STATUS['voltages']['cell6_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell6"] = BMS_STATUS['voltages']['cell6_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell7_voltage']['value'] = get_voltage_value(ord(packet[16]), ord(packet[17]))
|
||||
BMS_STATUS['voltages']['cell7_voltage']['value'] = get_voltage_value((packet[16]), (packet[17]))
|
||||
BMS_STATUS['voltages']['cell7_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell7_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell7"] = BMS_STATUS['voltages']['cell7_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell7"] = BMS_STATUS['voltages']['cell7_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell8_voltage']['value'] = get_voltage_value(ord(packet[18]), ord(packet[19]))
|
||||
BMS_STATUS['voltages']['cell8_voltage']['value'] = get_voltage_value((packet[18]), (packet[19]))
|
||||
BMS_STATUS['voltages']['cell8_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell8_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell8"] = BMS_STATUS['voltages']['cell8_voltage']['text']
|
||||
|
|
@ -1008,49 +1010,49 @@ def parse_packet(packet):
|
|||
|
||||
if (packet_length == PACKET_LENGTH_STATUS_CELLS[1]): # packet from BMS16
|
||||
|
||||
BMS_STATUS['voltages']['cell9_voltage']['value'] = get_voltage_value(ord(packet[20]), ord(packet[21]))
|
||||
BMS_STATUS['voltages']['cell9_voltage']['value'] = get_voltage_value((packet[20]), (packet[21]))
|
||||
BMS_STATUS['voltages']['cell9_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell9_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell9"] = BMS_STATUS['voltages']['cell9_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell9"] = BMS_STATUS['voltages']['cell9_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell10_voltage']['value'] = get_voltage_value(ord(packet[22]), ord(packet[23]))
|
||||
BMS_STATUS['voltages']['cell10_voltage']['value'] = get_voltage_value((packet[22]), (packet[23]))
|
||||
BMS_STATUS['voltages']['cell10_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell10_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell10"] = BMS_STATUS['voltages']['cell10_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell10"] = BMS_STATUS['voltages']['cell10_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell11_voltage']['value'] = get_voltage_value(ord(packet[24]), ord(packet[25]))
|
||||
BMS_STATUS['voltages']['cell11_voltage']['value'] = get_voltage_value((packet[24]), (packet[25]))
|
||||
BMS_STATUS['voltages']['cell11_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell11_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell11"] = BMS_STATUS['voltages']['cell11_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell11"] = BMS_STATUS['voltages']['cell11_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell12_voltage']['value'] = get_voltage_value(ord(packet[26]), ord(packet[27]))
|
||||
BMS_STATUS['voltages']['cell12_voltage']['value'] = get_voltage_value((packet[26]), (packet[27]))
|
||||
BMS_STATUS['voltages']['cell12_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell12_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell12"] = BMS_STATUS['voltages']['cell12_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell12"] = BMS_STATUS['voltages']['cell12_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell13_voltage']['value'] = get_voltage_value(ord(packet[28]), ord(packet[29]))
|
||||
BMS_STATUS['voltages']['cell13_voltage']['value'] = get_voltage_value((packet[28]), (packet[29]))
|
||||
BMS_STATUS['voltages']['cell13_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell13_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell13"] = BMS_STATUS['voltages']['cell13_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell13"] = BMS_STATUS['voltages']['cell13_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell14_voltage']['value'] = get_voltage_value(ord(packet[30]), ord(packet[31]))
|
||||
BMS_STATUS['voltages']['cell14_voltage']['value'] = get_voltage_value((packet[30]), (packet[31]))
|
||||
BMS_STATUS['voltages']['cell14_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell14_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell14"] = BMS_STATUS['voltages']['cell14_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell14"] = BMS_STATUS['voltages']['cell14_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell15_voltage']['value'] = get_voltage_value(ord(packet[32]), ord(packet[33]))
|
||||
BMS_STATUS['voltages']['cell15_voltage']['value'] = get_voltage_value((packet[32]), (packet[33]))
|
||||
BMS_STATUS['voltages']['cell15_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell15_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell15"] = BMS_STATUS['voltages']['cell15_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell15"] = BMS_STATUS['voltages']['cell15_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell16_voltage']['value'] = get_voltage_value(ord(packet[34]), ord(packet[35]))
|
||||
BMS_STATUS['voltages']['cell16_voltage']['value'] = get_voltage_value((packet[34]), (packet[35]))
|
||||
BMS_STATUS['voltages']['cell16_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell16_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell16"] = BMS_STATUS['voltages']['cell16_voltage']['text']
|
||||
|
|
@ -1059,49 +1061,49 @@ def parse_packet(packet):
|
|||
|
||||
if (packet_length == PACKET_LENGTH_STATUS_CELLS[2]): # packet from BMS24
|
||||
|
||||
BMS_STATUS['voltages']['cell17_voltage']['value'] = get_voltage_value(ord(packet[36]), ord(packet[37]))
|
||||
BMS_STATUS['voltages']['cell17_voltage']['value'] = get_voltage_value((packet[36]), (packet[37]))
|
||||
BMS_STATUS['voltages']['cell17_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell17_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell17"] = BMS_STATUS['voltages']['cell17_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell17"] = BMS_STATUS['voltages']['cell17_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell18_voltage']['value'] = get_voltage_value(ord(packet[38]), ord(packet[39]))
|
||||
BMS_STATUS['voltages']['cell18_voltage']['value'] = get_voltage_value((packet[38]), (packet[39]))
|
||||
BMS_STATUS['voltages']['cell18_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell18_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell18"] = BMS_STATUS['voltages']['cell18_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell18"] = BMS_STATUS['voltages']['cell18_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell19_voltage']['value'] = get_voltage_value(ord(packet[40]), ord(packet[41]))
|
||||
BMS_STATUS['voltages']['cell19_voltage']['value'] = get_voltage_value((packet[40]), (packet[41]))
|
||||
BMS_STATUS['voltages']['cell19_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell19_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell19"] = BMS_STATUS['voltages']['cell19_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell19"] = BMS_STATUS['voltages']['cell19_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell20_voltage']['value'] = get_voltage_value(ord(packet[42]), ord(packet[43]))
|
||||
BMS_STATUS['voltages']['cell20_voltage']['value'] = get_voltage_value((packet[42]), (packet[43]))
|
||||
BMS_STATUS['voltages']['cell20_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell20_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell20"] = BMS_STATUS['voltages']['cell20_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell20"] = BMS_STATUS['voltages']['cell20_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell21_voltage']['value'] = get_voltage_value(ord(packet[44]), ord(packet[45]))
|
||||
BMS_STATUS['voltages']['cell21_voltage']['value'] = get_voltage_value((packet[44]), (packet[45]))
|
||||
BMS_STATUS['voltages']['cell21_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell21_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell21"] = BMS_STATUS['voltages']['cell21_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell21"] = BMS_STATUS['voltages']['cell21_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell22_voltage']['value'] = get_voltage_value(ord(packet[46]), ord(packet[47]))
|
||||
BMS_STATUS['voltages']['cell22_voltage']['value'] = get_voltage_value((packet[46]), (packet[47]))
|
||||
BMS_STATUS['voltages']['cell22_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell22_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell22"] = BMS_STATUS['voltages']['cell22_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell22"] = BMS_STATUS['voltages']['cell22_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell23_voltage']['value'] = get_voltage_value(ord(packet[48]), ord(packet[49]))
|
||||
BMS_STATUS['voltages']['cell23_voltage']['value'] = get_voltage_value((packet[48]), (packet[49]))
|
||||
BMS_STATUS['voltages']['cell23_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell23_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell23"] = BMS_STATUS['voltages']['cell23_voltage']['text']
|
||||
dbusservice["/Raw/Voltages/Cell23"] = BMS_STATUS['voltages']['cell23_voltage']['value']
|
||||
|
||||
BMS_STATUS['voltages']['cell24_voltage']['value'] = get_voltage_value(ord(packet[50]), ord(packet[51]))
|
||||
BMS_STATUS['voltages']['cell24_voltage']['value'] = get_voltage_value((packet[50]), (packet[51]))
|
||||
BMS_STATUS['voltages']['cell24_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell24_voltage']['value']) + "V"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/Cell24"] = BMS_STATUS['voltages']['cell24_voltage']['text']
|
||||
|
|
@ -1184,13 +1186,13 @@ def parse_packet(packet):
|
|||
if (packet_length == PACKET_LENGTH_STATUS_CELLS[0]): # packet from BMS8
|
||||
|
||||
# get battery capacity
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity(ord(packet[20]), ord(packet[21]), ord(packet[22]), ord(packet[23]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity((packet[20]), (packet[21]), (packet[22]), (packet[23]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_wh']['value']) + "Wh"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['text']
|
||||
dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['value']
|
||||
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity(ord(packet[24]), ord(packet[25]), ord(packet[26]), ord(packet[27]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity((packet[24]), (packet[25]), (packet[26]), (packet[27]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_ah']['value']) + "Ah"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityAH"] = BMS_STATUS['voltages']['battery_capacity_ah']['text']
|
||||
|
|
@ -1200,13 +1202,13 @@ def parse_packet(packet):
|
|||
elif (packet_length == PACKET_LENGTH_STATUS_CELLS[1]): # packet from BMS16
|
||||
|
||||
# get battery capacity
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity(ord(packet[36]), ord(packet[37]), ord(packet[38]), ord(packet[39]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity((packet[36]), (packet[37]), (packet[38]), (packet[39]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_wh']['value']) + "Wh"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['text']
|
||||
dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['value']
|
||||
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity(ord(packet[40]), ord(packet[41]), ord(packet[42]), ord(packet[43]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity((packet[40]), (packet[41]), (packet[42]), (packet[43]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_ah']['value']) + "Ah"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityAH"] = BMS_STATUS['voltages']['battery_capacity_ah']['text']
|
||||
|
|
@ -1216,13 +1218,13 @@ def parse_packet(packet):
|
|||
elif (packet_length == PACKET_LENGTH_STATUS_CELLS[2]): # packet from BMS24
|
||||
|
||||
# get battery capacity
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity(ord(packet[52]), ord(packet[53]), ord(packet[54]), ord(packet[55]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['value'] = get_battery_capacity((packet[52]), (packet[53]), (packet[54]), (packet[55]))
|
||||
BMS_STATUS['voltages']['battery_capacity_wh']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_wh']['value']) + "Wh"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['text']
|
||||
dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_wh']['value']
|
||||
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity(ord(packet[56]), ord(packet[57]), ord(packet[58]), ord(packet[59]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['value'] = get_battery_capacity((packet[56]), (packet[57]), (packet[58]), (packet[59]))
|
||||
BMS_STATUS['voltages']['battery_capacity_ah']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['battery_capacity_ah']['value']) + "Ah"
|
||||
if args.victron:
|
||||
dbusservice["/Voltages/BatteryCapacityAH"] = BMS_STATUS['voltages']['battery_capacity_ah']['text']
|
||||
|
|
@ -1319,7 +1321,7 @@ def parse_packet(packet):
|
|||
# strip packet
|
||||
packet = packet[packet_length:]
|
||||
|
||||
elif (ord(packet[2]) == PACKET_STATUS_IMPEDANCES):
|
||||
elif ((packet[2]) == PACKET_STATUS_IMPEDANCES):
|
||||
|
||||
if (len(packet) < PACKET_LENGTH_STATUS_IMPEDANCES):
|
||||
logging.debug("Packet Impedances Cells too short, skip")
|
||||
|
|
@ -1328,16 +1330,16 @@ def parse_packet(packet):
|
|||
# delete old data
|
||||
reset_impedances_values()
|
||||
|
||||
cell_count = (packet_length - 8) / 2;
|
||||
cell_count = (packet_length - 8) // 2;
|
||||
logging.debug("Packet Impedances, detected cells: #" + str(cell_count))
|
||||
|
||||
# checksum value
|
||||
checksum = ord(packet[packet_length-1])
|
||||
checksum = (packet[packet_length-1])
|
||||
checksum_check = 0
|
||||
|
||||
# calculate checksum
|
||||
for i in range(packet_length-1):
|
||||
checksum_check = checksum_check + ord(packet[i])
|
||||
checksum_check = checksum_check + (packet[i])
|
||||
checksum_check = checksum_check % 256
|
||||
logging.debug("Packet Checksum BMS: " + str(checksum) + "|" + str(checksum_check))
|
||||
|
||||
|
|
@ -1347,11 +1349,11 @@ def parse_packet(packet):
|
|||
|
||||
# Chargery protocol manual:
|
||||
# Current 1 (A), It is instant current when measure cell impedance
|
||||
BMS_STATUS['impedances']['current1']['value'] = get_current1_value(ord(packet[5]), ord(packet[6]))
|
||||
BMS_STATUS['impedances']['current1']['value'] = get_current1_value((packet[5]), (packet[6]))
|
||||
|
||||
# Chargery protocol manual:
|
||||
# Current mode 1 means battery is in charging or discharging when cell impedance is measured
|
||||
bms_current_mode1 = ord(packet[4])
|
||||
bms_current_mode1 = (packet[4])
|
||||
if (bms_current_mode1 == 0x00):
|
||||
BMS_STATUS['impedances']['current_mode1']['value'] = 0
|
||||
BMS_STATUS['impedances']['current_mode1']['text'] = "Discharge"
|
||||
|
|
@ -1371,7 +1373,7 @@ def parse_packet(packet):
|
|||
dbusservice["/Raw/Impedances/Current1"] = BMS_STATUS['impedances']['current1']['value']
|
||||
|
||||
for i in range(1, cell_count+1):
|
||||
BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['value'] = get_cell_impedance(ord(packet[7+(2*(i-1))]), ord(packet[8+(2*(i-1))]))
|
||||
BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['value'] = get_cell_impedance((packet[7+(2*(i-1))]), (packet[8+(2*(i-1))]))
|
||||
BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['text'] = "{:.1f}".format(BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['value']) + "m" + SPECIAL_DISPLAY_SYMBOLS['ohm']
|
||||
if args.victron:
|
||||
dbusservice["/Impedances/Cell"+str(i)] = BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['text']
|
||||
|
|
@ -1512,6 +1514,7 @@ def handle_serial_data(test_packet = ''):
|
|||
try:
|
||||
|
||||
if (len(test_packet) > 0): # for testing the example packets form the chargery manual
|
||||
print(test_packet)
|
||||
parse_packet(test_packet)
|
||||
else:
|
||||
serial_packet = ""
|
||||
|
|
@ -1520,11 +1523,14 @@ def handle_serial_data(test_packet = ''):
|
|||
if (serial_port.in_waiting >= (PACKET_LENGTH_MINIMUM * 2)):
|
||||
data_buffer_array = serial_port.read(serial_port.in_waiting)
|
||||
logging.debug("Data Received [" + str(len(data_buffer_array)) + " bytes]")
|
||||
print(data_buffer_array)
|
||||
for data_buffer in data_buffer_array:
|
||||
serial_packet += data_buffer
|
||||
pass
|
||||
#print(hex(data_buffer))
|
||||
#serial_packet += data_buffer
|
||||
|
||||
if (len(serial_packet) > 0):
|
||||
parse_packet(serial_packet)
|
||||
if (len(data_buffer_array) > 0):
|
||||
parse_packet(bytearray(data_buffer_array))
|
||||
|
||||
data_buffer_array = ""
|
||||
serial_packet = ""
|
||||
|
|
@ -1540,7 +1546,10 @@ def handle_serial_data(test_packet = ''):
|
|||
|
||||
if args.test:
|
||||
for item in BMS_TEST_PACKETS.items():
|
||||
handle_serial_data(str(item[1]));
|
||||
print("Test Item Start")
|
||||
handle_serial_data((item[1]));
|
||||
print("Test Item End")
|
||||
print("")
|
||||
|
||||
# if we registered in testing to dbus, wait until the script is exitted with keyboard interruption
|
||||
if args.victron:
|
||||
|
|
@ -1557,6 +1566,9 @@ else:
|
|||
mainloop.run()
|
||||
else:
|
||||
while True:
|
||||
print("Test Item Start")
|
||||
handle_serial_data()
|
||||
time.sleep(1)
|
||||
print("Test Item End")
|
||||
print("")
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue