From b6083495ee9cad8ef4a1ef4845befce3fbf8152f Mon Sep 17 00:00:00 2001 From: Yeongdo Park Date: Wed, 28 Oct 2020 19:27:49 -0700 Subject: [PATCH] Save data to OUTPUT --- driver/chargerybms.py | 341 ++++++++++++++++++++++-------------------- 1 file changed, 177 insertions(+), 164 deletions(-) diff --git a/driver/chargerybms.py b/driver/chargerybms.py index 91b15b1..de25dbb 100644 --- a/driver/chargerybms.py +++ b/driver/chargerybms.py @@ -39,6 +39,7 @@ parser = argparse.ArgumentParser(description = 'Chargery BMS driver') parser.add_argument('--version', action='version', version='%(prog)s v' + str(driver['version']) + ' (' + driver['serial'] + ')') parser.add_argument('--debug', action="store_true", help='enable debug logging') parser.add_argument('--test', action="store_true", help='test some stored examples network packets') +parser.add_argument('-o', '--output', help='save data to OUTPUT') requiredArguments = parser.add_argument_group('required arguments') requiredArguments.add_argument('-d', '--device', help='serial device for data (eg /dev/ttyUSB0)', required=True) args = parser.parse_args() @@ -108,39 +109,39 @@ BMS_STATUS = { } }, 'voltages' : { - 'cell1_voltage' : { + 'cell01_voltage' : { 'value' : -1, 'text' : "" }, - 'cell2_voltage' : { + 'cell02_voltage' : { 'value' : -1, 'text' : "" }, - 'cell3_voltage' : { + 'cell03_voltage' : { 'value' : -1, 'text' : "" }, - 'cell4_voltage' : { + 'cell04_voltage' : { 'value' : -1, 'text' : "" }, - 'cell5_voltage' : { + 'cell05_voltage' : { 'value' : -1, 'text' : "" }, - 'cell6_voltage' : { + 'cell06_voltage' : { 'value' : -1, 'text' : "" }, - 'cell7_voltage' : { + 'cell07_voltage' : { 'value' : -1, 'text' : "" }, - 'cell8_voltage' : { + 'cell08_voltage' : { 'value' : -1, 'text' : "" }, - 'cell9_voltage' : { + 'cell09_voltage' : { 'value' : -1, 'text' : "" }, @@ -244,39 +245,39 @@ BMS_STATUS = { 'value' : -1, 'text' : "" }, - 'cell1_impedance' : { + 'cell01_impedance' : { 'value' : -1, 'text' : "" }, - 'cell2_impedance' : { + 'cell02_impedance' : { 'value' : -1, 'text' : "" }, - 'cell3_impedance' : { + 'cell03_impedance' : { 'value' : -1, 'text' : "" }, - 'cell4_impedance' : { + 'cell04_impedance' : { 'value' : -1, 'text' : "" }, - 'cell5_impedance' : { + 'cell05_impedance' : { 'value' : -1, 'text' : "" }, - 'cell6_impedance' : { + 'cell06_impedance' : { 'value' : -1, 'text' : "" }, - 'cell7_impedance' : { + 'cell07_impedance' : { 'value' : -1, 'text' : "" }, - 'cell8_impedance' : { + 'cell08_impedance' : { 'value' : -1, 'text' : "" }, - 'cell9_impedance' : { + 'cell09_impedance' : { 'value' : -1, 'text' : "" }, @@ -391,6 +392,20 @@ SPECIAL_DISPLAY_SYMBOLS = { 'ohm' : u'\u03A9' } +def dfs_bms_status (f, bms_status, prefix=""): + import functools, operator + if "value" in bms_status: + return [f(prefix, bms_status)] + else: + return functools.reduce(operator.add, + [dfs_bms_status(f, bms_status[sub_dict], (prefix+"." if len(prefix)>0 else "") + sub_dict) for sub_dict in sorted(bms_status.keys())], + []) + +def print_status_header (prefix, bms_status_leaf): + return prefix + +def print_status_value (prefix, bms_status_leaf): + return bms_status_leaf["value"] def reset_status_values(): @@ -416,24 +431,24 @@ def reset_impedances_values(): BMS_STATUS['impedances']['current_mode1']['text'] = "" BMS_STATUS['impedances']['current1']['value'] = -1 BMS_STATUS['impedances']['current1']['text'] = "" - BMS_STATUS['impedances']['cell1_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell1_impedance']['text'] = "" - BMS_STATUS['impedances']['cell2_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell2_impedance']['text'] = "" - BMS_STATUS['impedances']['cell3_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell3_impedance']['text'] = "" - BMS_STATUS['impedances']['cell4_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell4_impedance']['text'] = "" - BMS_STATUS['impedances']['cell5_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell5_impedance']['text'] = "" - BMS_STATUS['impedances']['cell6_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell6_impedance']['text'] = "" - BMS_STATUS['impedances']['cell7_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell7_impedance']['text'] = "" - BMS_STATUS['impedances']['cell8_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell8_impedance']['text'] = "" - BMS_STATUS['impedances']['cell9_impedance']['value'] = -1 - BMS_STATUS['impedances']['cell9_impedance']['text'] = "" + BMS_STATUS['impedances']['cell01_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell01_impedance']['text'] = "" + BMS_STATUS['impedances']['cell02_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell02_impedance']['text'] = "" + BMS_STATUS['impedances']['cell03_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell03_impedance']['text'] = "" + BMS_STATUS['impedances']['cell04_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell04_impedance']['text'] = "" + BMS_STATUS['impedances']['cell05_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell05_impedance']['text'] = "" + BMS_STATUS['impedances']['cell06_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell06_impedance']['text'] = "" + BMS_STATUS['impedances']['cell07_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell07_impedance']['text'] = "" + BMS_STATUS['impedances']['cell08_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell08_impedance']['text'] = "" + BMS_STATUS['impedances']['cell09_impedance']['value'] = -1 + BMS_STATUS['impedances']['cell09_impedance']['text'] = "" BMS_STATUS['impedances']['cell10_impedance']['value'] = -1 BMS_STATUS['impedances']['cell10_impedance']['text'] = "" BMS_STATUS['impedances']['cell11_impedance']['value'] = -1 @@ -481,24 +496,24 @@ def reset_impedances_values(): def reset_voltages_values(): - BMS_STATUS['voltages']['cell1_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell1_voltage']['text'] = "" - BMS_STATUS['voltages']['cell2_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell2_voltage']['text'] = "" - BMS_STATUS['voltages']['cell3_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell3_voltage']['text'] = "" - BMS_STATUS['voltages']['cell4_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell4_voltage']['text'] = "" - BMS_STATUS['voltages']['cell5_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell5_voltage']['text'] = "" - BMS_STATUS['voltages']['cell6_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell6_voltage']['text'] = "" - BMS_STATUS['voltages']['cell7_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell7_voltage']['text'] = "" - BMS_STATUS['voltages']['cell8_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell8_voltage']['text'] = "" - BMS_STATUS['voltages']['cell9_voltage']['value'] = -1 - BMS_STATUS['voltages']['cell9_voltage']['text'] = "" + BMS_STATUS['voltages']['cell01_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell01_voltage']['text'] = "" + BMS_STATUS['voltages']['cell02_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell02_voltage']['text'] = "" + BMS_STATUS['voltages']['cell03_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell03_voltage']['text'] = "" + BMS_STATUS['voltages']['cell04_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell04_voltage']['text'] = "" + BMS_STATUS['voltages']['cell05_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell05_voltage']['text'] = "" + BMS_STATUS['voltages']['cell06_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell06_voltage']['text'] = "" + BMS_STATUS['voltages']['cell07_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell07_voltage']['text'] = "" + BMS_STATUS['voltages']['cell08_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell08_voltage']['text'] = "" + BMS_STATUS['voltages']['cell09_voltage']['value'] = -1 + BMS_STATUS['voltages']['cell09_voltage']['text'] = "" BMS_STATUS['voltages']['cell10_voltage']['value'] = -1 BMS_STATUS['voltages']['cell10_voltage']['text'] = "" BMS_STATUS['voltages']['cell11_voltage']['value'] = -1 @@ -757,34 +772,34 @@ def parse_packet(packet): # cell voltages BMS8 - 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" + BMS_STATUS['voltages']['cell01_voltage']['value'] = get_voltage_value((packet[4]), (packet[5])) + BMS_STATUS['voltages']['cell01_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell01_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell02_voltage']['value'] = get_voltage_value((packet[6]), (packet[7])) + BMS_STATUS['voltages']['cell02_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell02_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell03_voltage']['value'] = get_voltage_value((packet[8]), (packet[9])) + BMS_STATUS['voltages']['cell03_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell03_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell04_voltage']['value'] = get_voltage_value((packet[10]), (packet[11])) + BMS_STATUS['voltages']['cell04_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell04_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell05_voltage']['value'] = get_voltage_value((packet[12]), (packet[13])) + BMS_STATUS['voltages']['cell05_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell05_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell06_voltage']['value'] = get_voltage_value((packet[14]), (packet[15])) + BMS_STATUS['voltages']['cell06_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell06_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell07_voltage']['value'] = get_voltage_value((packet[16]), (packet[17])) + BMS_STATUS['voltages']['cell07_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell07_voltage']['value']) + "V" - 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" + BMS_STATUS['voltages']['cell08_voltage']['value'] = get_voltage_value((packet[18]), (packet[19])) + BMS_STATUS['voltages']['cell08_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell08_voltage']['value']) + "V" if (packet_length == PACKET_LENGTH_STATUS_CELLS[1]): # packet from BMS16 - 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" + BMS_STATUS['voltages']['cell09_voltage']['value'] = get_voltage_value((packet[20]), (packet[21])) + BMS_STATUS['voltages']['cell09_voltage']['text'] = "{:.3f}".format(BMS_STATUS['voltages']['cell09_voltage']['value']) + "V" 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" @@ -839,24 +854,24 @@ def parse_packet(packet): # get min/max voltages to calculate the diff cell_voltages = [] - if (BMS_STATUS['voltages']['cell1_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell1_voltage']['value']) - if (BMS_STATUS['voltages']['cell2_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell2_voltage']['value']) - if (BMS_STATUS['voltages']['cell3_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell3_voltage']['value']) - if (BMS_STATUS['voltages']['cell4_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell4_voltage']['value']) - if (BMS_STATUS['voltages']['cell5_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell5_voltage']['value']) - if (BMS_STATUS['voltages']['cell6_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell6_voltage']['value']) - if (BMS_STATUS['voltages']['cell7_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell7_voltage']['value']) - if (BMS_STATUS['voltages']['cell8_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell8_voltage']['value']) - if (BMS_STATUS['voltages']['cell9_voltage']['value'] >= MIN_CELL_VOLTAGE): - cell_voltages.append(BMS_STATUS['voltages']['cell9_voltage']['value']) + if (BMS_STATUS['voltages']['cell01_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell01_voltage']['value']) + if (BMS_STATUS['voltages']['cell02_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell02_voltage']['value']) + if (BMS_STATUS['voltages']['cell03_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell03_voltage']['value']) + if (BMS_STATUS['voltages']['cell04_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell04_voltage']['value']) + if (BMS_STATUS['voltages']['cell05_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell05_voltage']['value']) + if (BMS_STATUS['voltages']['cell06_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell06_voltage']['value']) + if (BMS_STATUS['voltages']['cell07_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell07_voltage']['value']) + if (BMS_STATUS['voltages']['cell08_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell08_voltage']['value']) + if (BMS_STATUS['voltages']['cell09_voltage']['value'] >= MIN_CELL_VOLTAGE): + cell_voltages.append(BMS_STATUS['voltages']['cell09_voltage']['value']) if (BMS_STATUS['voltages']['cell10_voltage']['value'] >= MIN_CELL_VOLTAGE): cell_voltages.append(BMS_STATUS['voltages']['cell10_voltage']['value']) if (BMS_STATUS['voltages']['cell11_voltage']['value'] >= MIN_CELL_VOLTAGE): @@ -943,14 +958,14 @@ def parse_packet(packet): "][CAPACITYWH|" + BMS_STATUS['voltages']['battery_capacity_wh']['text'] + "][DIFF|" + BMS_STATUS['voltages']['agg_voltages']['diff']['text'] + "][SUM|" + BMS_STATUS['voltages']['agg_voltages']['sum']['text'] + - "][#1|" + BMS_STATUS['voltages']['cell1_voltage']['text'] + - "][#2|" + BMS_STATUS['voltages']['cell2_voltage']['text'] + - "][#3|" + BMS_STATUS['voltages']['cell3_voltage']['text'] + - "][#4|" + BMS_STATUS['voltages']['cell4_voltage']['text'] + - "][#5|" + BMS_STATUS['voltages']['cell5_voltage']['text'] + - "][#6|" + BMS_STATUS['voltages']['cell6_voltage']['text'] + - "][#7|" + BMS_STATUS['voltages']['cell7_voltage']['text'] + - "][#8|" + BMS_STATUS['voltages']['cell8_voltage']['text'] + "]") + "][#1|" + BMS_STATUS['voltages']['cell01_voltage']['text'] + + "][#2|" + BMS_STATUS['voltages']['cell02_voltage']['text'] + + "][#3|" + BMS_STATUS['voltages']['cell03_voltage']['text'] + + "][#4|" + BMS_STATUS['voltages']['cell04_voltage']['text'] + + "][#5|" + BMS_STATUS['voltages']['cell05_voltage']['text'] + + "][#6|" + BMS_STATUS['voltages']['cell06_voltage']['text'] + + "][#7|" + BMS_STATUS['voltages']['cell07_voltage']['text'] + + "][#8|" + BMS_STATUS['voltages']['cell08_voltage']['text'] + "]") elif (packet_length == PACKET_LENGTH_STATUS_CELLS[1]): # packet from BMS16 @@ -959,15 +974,15 @@ def parse_packet(packet): "][CAPACITYWH|" + BMS_STATUS['voltages']['battery_capacity_wh']['text'] + "][DIFF|" + BMS_STATUS['voltages']['agg_voltages']['diff']['text'] + "][SUM|" + BMS_STATUS['voltages']['agg_voltages']['sum']['text'] + - "][#1|" + BMS_STATUS['voltages']['cell1_voltage']['text'] + - "][#2|" + BMS_STATUS['voltages']['cell2_voltage']['text'] + - "][#3|" + BMS_STATUS['voltages']['cell3_voltage']['text'] + - "][#4|" + BMS_STATUS['voltages']['cell4_voltage']['text'] + - "][#5|" + BMS_STATUS['voltages']['cell5_voltage']['text'] + - "][#6|" + BMS_STATUS['voltages']['cell6_voltage']['text'] + - "][#7|" + BMS_STATUS['voltages']['cell7_voltage']['text'] + - "][#8|" + BMS_STATUS['voltages']['cell8_voltage']['text'] + - "][#9|" + BMS_STATUS['voltages']['cell9_voltage']['text'] + + "][#1|" + BMS_STATUS['voltages']['cell01_voltage']['text'] + + "][#2|" + BMS_STATUS['voltages']['cell02_voltage']['text'] + + "][#3|" + BMS_STATUS['voltages']['cell03_voltage']['text'] + + "][#4|" + BMS_STATUS['voltages']['cell04_voltage']['text'] + + "][#5|" + BMS_STATUS['voltages']['cell05_voltage']['text'] + + "][#6|" + BMS_STATUS['voltages']['cell06_voltage']['text'] + + "][#7|" + BMS_STATUS['voltages']['cell07_voltage']['text'] + + "][#8|" + BMS_STATUS['voltages']['cell08_voltage']['text'] + + "][#9|" + BMS_STATUS['voltages']['cell09_voltage']['text'] + "][#10|" + BMS_STATUS['voltages']['cell10_voltage']['text'] + "][#11|" + BMS_STATUS['voltages']['cell11_voltage']['text'] + "][#12|" + BMS_STATUS['voltages']['cell12_voltage']['text'] + @@ -984,15 +999,15 @@ def parse_packet(packet): "][CAPACITYWH|" + BMS_STATUS['voltages']['battery_capacity_wh']['text'] + "][DIFF|" + BMS_STATUS['voltages']['agg_voltages']['diff']['text'] + "][SUM|" + BMS_STATUS['voltages']['agg_voltages']['sum']['text'] + - "][#1|" + BMS_STATUS['voltages']['cell1_voltage']['text'] + - "][#2|" + BMS_STATUS['voltages']['cell2_voltage']['text'] + - "][#3|" + BMS_STATUS['voltages']['cell3_voltage']['text'] + - "][#4|" + BMS_STATUS['voltages']['cell4_voltage']['text'] + - "][#5|" + BMS_STATUS['voltages']['cell5_voltage']['text'] + - "][#6|" + BMS_STATUS['voltages']['cell6_voltage']['text'] + - "][#7|" + BMS_STATUS['voltages']['cell7_voltage']['text'] + - "][#8|" + BMS_STATUS['voltages']['cell8_voltage']['text'] + - "][#9|" + BMS_STATUS['voltages']['cell9_voltage']['text'] + + "][#1|" + BMS_STATUS['voltages']['cell01_voltage']['text'] + + "][#2|" + BMS_STATUS['voltages']['cell02_voltage']['text'] + + "][#3|" + BMS_STATUS['voltages']['cell03_voltage']['text'] + + "][#4|" + BMS_STATUS['voltages']['cell04_voltage']['text'] + + "][#5|" + BMS_STATUS['voltages']['cell05_voltage']['text'] + + "][#6|" + BMS_STATUS['voltages']['cell06_voltage']['text'] + + "][#7|" + BMS_STATUS['voltages']['cell07_voltage']['text'] + + "][#8|" + BMS_STATUS['voltages']['cell08_voltage']['text'] + + "][#9|" + BMS_STATUS['voltages']['cell09_voltage']['text'] + "][#10|" + BMS_STATUS['voltages']['cell10_voltage']['text'] + "][#11|" + BMS_STATUS['voltages']['cell11_voltage']['text'] + "][#12|" + BMS_STATUS['voltages']['cell12_voltage']['text'] + @@ -1062,32 +1077,32 @@ def parse_packet(packet): BMS_STATUS['impedances']['current1']['text'] = "" for i in range(1, cell_count+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'] + BMS_STATUS['impedances']['cell'+"{:02d}".format(i)+'_impedance']['value'] = get_cell_impedance((packet[7+(2*(i-1))]), (packet[8+(2*(i-1))])) + BMS_STATUS['impedances']['cell'+"{:02d}".format(i)+'_impedance']['text'] = "{:.1f}".format(BMS_STATUS['impedances']['cell'+"{:02d}".format(i)+'_impedance']['value']) + "m" + SPECIAL_DISPLAY_SYMBOLS['ohm'] # get min/max impedances to calculate the diff cell_impedances = [] - if (BMS_STATUS['impedances']['cell1_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell1_impedance']['value']) - if (BMS_STATUS['impedances']['cell2_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell2_impedance']['value']) - if (BMS_STATUS['impedances']['cell3_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell3_impedance']['value']) - if (BMS_STATUS['impedances']['cell4_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell4_impedance']['value']) - if (BMS_STATUS['impedances']['cell5_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell5_impedance']['value']) - if (BMS_STATUS['impedances']['cell6_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell6_impedance']['value']) - if (BMS_STATUS['impedances']['cell7_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell7_impedance']['value']) - if (BMS_STATUS['impedances']['cell8_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell8_impedance']['value']) - if (BMS_STATUS['impedances']['cell9_impedance']['value'] >= MIN_CELL_IMPEDANCE): - cell_impedances.append(BMS_STATUS['impedances']['cell9_impedance']['value']) + if (BMS_STATUS['impedances']['cell01_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell01_impedance']['value']) + if (BMS_STATUS['impedances']['cell02_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell02_impedance']['value']) + if (BMS_STATUS['impedances']['cell03_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell03_impedance']['value']) + if (BMS_STATUS['impedances']['cell04_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell04_impedance']['value']) + if (BMS_STATUS['impedances']['cell05_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell05_impedance']['value']) + if (BMS_STATUS['impedances']['cell06_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell06_impedance']['value']) + if (BMS_STATUS['impedances']['cell07_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell07_impedance']['value']) + if (BMS_STATUS['impedances']['cell08_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell08_impedance']['value']) + if (BMS_STATUS['impedances']['cell09_impedance']['value'] >= MIN_CELL_IMPEDANCE): + cell_impedances.append(BMS_STATUS['impedances']['cell09_impedance']['value']) if (BMS_STATUS['impedances']['cell10_impedance']['value'] >= MIN_CELL_IMPEDANCE): cell_impedances.append(BMS_STATUS['impedances']['cell10_impedance']['value']) if (BMS_STATUS['impedances']['cell11_impedance']['value'] >= MIN_CELL_IMPEDANCE): @@ -1138,15 +1153,15 @@ def parse_packet(packet): "][MODE1|" + BMS_STATUS['impedances']['current_mode1']['text'] + "][CURRENT1|" + BMS_STATUS['impedances']['current1']['text'] + "][SUM|" + BMS_STATUS['impedances']['agg_impedances']['sum']['text'] + - "][#1|" + BMS_STATUS['impedances']['cell1_impedance']['text'] + - "][#2|" + BMS_STATUS['impedances']['cell2_impedance']['text'] + - "][#3|" + BMS_STATUS['impedances']['cell3_impedance']['text'] + - "][#4|" + BMS_STATUS['impedances']['cell4_impedance']['text'] + - "][#5|" + BMS_STATUS['impedances']['cell5_impedance']['text'] + - "][#6|" + BMS_STATUS['impedances']['cell6_impedance']['text'] + - "][#7|" + BMS_STATUS['impedances']['cell7_impedance']['text'] + - "][#8|" + BMS_STATUS['impedances']['cell8_impedance']['text'] + - "][#9|" + BMS_STATUS['impedances']['cell9_impedance']['text'] + + "][#1|" + BMS_STATUS['impedances']['cell01_impedance']['text'] + + "][#2|" + BMS_STATUS['impedances']['cell02_impedance']['text'] + + "][#3|" + BMS_STATUS['impedances']['cell03_impedance']['text'] + + "][#4|" + BMS_STATUS['impedances']['cell04_impedance']['text'] + + "][#5|" + BMS_STATUS['impedances']['cell05_impedance']['text'] + + "][#6|" + BMS_STATUS['impedances']['cell06_impedance']['text'] + + "][#7|" + BMS_STATUS['impedances']['cell07_impedance']['text'] + + "][#8|" + BMS_STATUS['impedances']['cell08_impedance']['text'] + + "][#9|" + BMS_STATUS['impedances']['cell09_impedance']['text'] + "][#10|" + BMS_STATUS['impedances']['cell10_impedance']['text'] + "][#11|" + BMS_STATUS['impedances']['cell11_impedance']['text'] + "][#12|" + BMS_STATUS['impedances']['cell12_impedance']['text'] + @@ -1187,7 +1202,6 @@ 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 = "" @@ -1196,34 +1210,33 @@ 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: - pass - #print(hex(data_buffer)) - #serial_packet += data_buffer - + if (len(data_buffer_array) > 0): parse_packet(bytearray(data_buffer_array)) data_buffer_array = "" - serial_packet = "" except KeyboardInterrupt: pass if args.test: - for item in BMS_TEST_PACKETS.items(): - print("Test Item Start") - handle_serial_data((item[1])); - print("Test Item End") - print("") + print("\n".join(dfs_bms_status(print_status_header, BMS_STATUS))) + for item in BMS_TEST_PACKETS.items(): + handle_serial_data((item[1])) + print(str(dfs_bms_status(print_status_value, BMS_STATUS)).strip('[]')) else: - while True: - print("Test Item Start") - handle_serial_data() - time.sleep(1) - print("Test Item End") - print("") \ No newline at end of file + if args.output is not None: + output_file = open(args.output) + print(",".join(dfs_bms_status(print_status_header, BMS_STATUS)), file=output_file) + + while True: + handle_serial_data() + print(str(dfs_bms_status(print_status_value, BMS_STATUS)).strip('[]'), file=output_file) + time.sleep(1) + else: + while True: + handle_serial_data() + time.sleep(1)