diff --git a/driver/chargerybms.py b/driver/chargerybms.py index 199c3b6..91b15b1 100644 --- a/driver/chargerybms.py +++ b/driver/chargerybms.py @@ -1,9 +1,7 @@ #!/usr/bin/env python import argparse -import gobject import platform -import argparse import logging import sys import os @@ -41,7 +39,6 @@ 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('--victron', action="store_true", help='enable Victron DBUS support for VenusOS') 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() @@ -56,185 +53,6 @@ serial_port.flushInput() logging.info(serial_port.name) -# victron stuff should be used -if args.victron: - - # Victron packages - sys.path.insert(1, os.path.join(os.path.dirname(__file__), './ext/velib_python')) - from vedbus import VeDbusService - - - from dbus.mainloop.glib import DBusGMainLoop - DBusGMainLoop(set_as_default=True) - - dbusservice = VeDbusService(driver['connection']) - - # Create the management objects, as specified in the ccgx dbus-api document - dbusservice.add_path('/Mgmt/ProcessName', __file__) - dbusservice.add_path('/Mgmt/ProcessVersion', 'Unknown and Python ' + platform.python_version()) - dbusservice.add_path('/Mgmt/Connection', driver['connection']) - - # Create the mandatory objects - dbusservice.add_path('/DeviceInstance', driver['instance']) - dbusservice.add_path('/ProductId', driver['id']) - dbusservice.add_path('/ProductName', driver['name']) - dbusservice.add_path('/FirmwareVersion', driver['version']) - dbusservice.add_path('/HardwareVersion', driver['version']) - dbusservice.add_path('/Serial', driver['serial']) - dbusservice.add_path('/Connected', 1) - - # Create device list - dbusservice.add_path('/Devices/0/DeviceInstance', driver['instance']) - dbusservice.add_path('/Devices/0/FirmwareVersion', driver['version']) - dbusservice.add_path('/Devices/0/ProductId', driver['id']) - dbusservice.add_path('/Devices/0/ProductName', driver['name']) - dbusservice.add_path('/Devices/0/ServiceName', driver['servicename']) - dbusservice.add_path('/Devices/0/VregLink', "(API)") - - # Create the chargery bms paths - dbusservice.add_path('/Info/Soc', -1) - dbusservice.add_path('/Info/CurrentMode', -1) - dbusservice.add_path('/Info/Current', -1) - dbusservice.add_path('/Info/Temp/Sensor1', -1) - dbusservice.add_path('/Info/Temp/Sensor2', -1) - dbusservice.add_path('/Info/ChargeEndVoltage', -1) - dbusservice.add_path('/Info/UpdateTimestamp', -1) - dbusservice.add_path('/Voltages/Cell1', -1) - dbusservice.add_path('/Voltages/Cell2', -1) - dbusservice.add_path('/Voltages/Cell3', -1) - dbusservice.add_path('/Voltages/Cell4', -1) - dbusservice.add_path('/Voltages/Cell5', -1) - dbusservice.add_path('/Voltages/Cell6', -1) - dbusservice.add_path('/Voltages/Cell7', -1) - dbusservice.add_path('/Voltages/Cell8', -1) - dbusservice.add_path('/Voltages/Cell9', -1) - dbusservice.add_path('/Voltages/Cell10', -1) - dbusservice.add_path('/Voltages/Cell11', -1) - dbusservice.add_path('/Voltages/Cell12', -1) - dbusservice.add_path('/Voltages/Cell13', -1) - dbusservice.add_path('/Voltages/Cell14', -1) - dbusservice.add_path('/Voltages/Cell15', -1) - dbusservice.add_path('/Voltages/Cell16', -1) - dbusservice.add_path('/Voltages/Cell17', -1) - dbusservice.add_path('/Voltages/Cell18', -1) - dbusservice.add_path('/Voltages/Cell19', -1) - dbusservice.add_path('/Voltages/Cell20', -1) - dbusservice.add_path('/Voltages/Cell21', -1) - dbusservice.add_path('/Voltages/Cell22', -1) - dbusservice.add_path('/Voltages/Cell23', -1) - dbusservice.add_path('/Voltages/Cell24', -1) - dbusservice.add_path('/Voltages/Sum', -1) - dbusservice.add_path('/Voltages/Diff', -1) - dbusservice.add_path('/Voltages/Max', -1) - dbusservice.add_path('/Voltages/Min', -1) - dbusservice.add_path('/Voltages/BatteryCapacityWH', -1) - dbusservice.add_path('/Voltages/BatteryCapacityAH', -1) - dbusservice.add_path('/Voltages/UpdateTimestamp', -1) - dbusservice.add_path('/Impedances/CurrentMode1', -1) - dbusservice.add_path('/Impedances/Current1', -1) - dbusservice.add_path('/Impedances/Cell1', -1) - dbusservice.add_path('/Impedances/Cell2', -1) - dbusservice.add_path('/Impedances/Cell3', -1) - dbusservice.add_path('/Impedances/Cell4', -1) - dbusservice.add_path('/Impedances/Cell5', -1) - dbusservice.add_path('/Impedances/Cell6', -1) - dbusservice.add_path('/Impedances/Cell7', -1) - dbusservice.add_path('/Impedances/Cell8', -1) - dbusservice.add_path('/Impedances/Cell9', -1) - dbusservice.add_path('/Impedances/Cell10', -1) - dbusservice.add_path('/Impedances/Cell11', -1) - dbusservice.add_path('/Impedances/Cell12', -1) - dbusservice.add_path('/Impedances/Cell13', -1) - dbusservice.add_path('/Impedances/Cell14', -1) - dbusservice.add_path('/Impedances/Cell15', -1) - dbusservice.add_path('/Impedances/Cell16', -1) - dbusservice.add_path('/Impedances/Cell17', -1) - dbusservice.add_path('/Impedances/Cell18', -1) - dbusservice.add_path('/Impedances/Cell19', -1) - dbusservice.add_path('/Impedances/Cell20', -1) - dbusservice.add_path('/Impedances/Cell21', -1) - dbusservice.add_path('/Impedances/Cell22', -1) - dbusservice.add_path('/Impedances/Cell23', -1) - dbusservice.add_path('/Impedances/Cell24', -1) - dbusservice.add_path('/Impedances/Sum', -1) - dbusservice.add_path('/Impedances/Diff', -1) - dbusservice.add_path('/Impedances/Max', -1) - dbusservice.add_path('/Impedances/Min', -1) - dbusservice.add_path('/Impedances/UpdateTimestamp', -1) - - - # Create the real values paths - dbusservice.add_path('/Raw/Info/Soc', -1) - dbusservice.add_path('/Raw/Info/CurrentMode', -1) - dbusservice.add_path('/Raw/Info/Current', -1) - dbusservice.add_path('/Raw/Info/Temp/Sensor1', -1) - dbusservice.add_path('/Raw/Info/Temp/Sensor2', -1) - dbusservice.add_path('/Raw/Info/ChargeEndVoltage', -1) - dbusservice.add_path('/Raw/Info/UpdateTimestamp', -1) - dbusservice.add_path('/Raw/Voltages/Cell1', -1) - dbusservice.add_path('/Raw/Voltages/Cell2', -1) - dbusservice.add_path('/Raw/Voltages/Cell3', -1) - dbusservice.add_path('/Raw/Voltages/Cell4', -1) - dbusservice.add_path('/Raw/Voltages/Cell5', -1) - dbusservice.add_path('/Raw/Voltages/Cell6', -1) - dbusservice.add_path('/Raw/Voltages/Cell7', -1) - dbusservice.add_path('/Raw/Voltages/Cell8', -1) - dbusservice.add_path('/Raw/Voltages/Cell9', -1) - dbusservice.add_path('/Raw/Voltages/Cell10', -1) - dbusservice.add_path('/Raw/Voltages/Cell11', -1) - dbusservice.add_path('/Raw/Voltages/Cell12', -1) - dbusservice.add_path('/Raw/Voltages/Cell13', -1) - dbusservice.add_path('/Raw/Voltages/Cell14', -1) - dbusservice.add_path('/Raw/Voltages/Cell15', -1) - dbusservice.add_path('/Raw/Voltages/Cell16', -1) - dbusservice.add_path('/Raw/Voltages/Cell17', -1) - dbusservice.add_path('/Raw/Voltages/Cell18', -1) - dbusservice.add_path('/Raw/Voltages/Cell19', -1) - dbusservice.add_path('/Raw/Voltages/Cell20', -1) - dbusservice.add_path('/Raw/Voltages/Cell21', -1) - dbusservice.add_path('/Raw/Voltages/Cell22', -1) - dbusservice.add_path('/Raw/Voltages/Cell23', -1) - dbusservice.add_path('/Raw/Voltages/Cell24', -1) - dbusservice.add_path('/Raw/Voltages/Sum', -1) - dbusservice.add_path('/Raw/Voltages/Diff', -1) - dbusservice.add_path('/Raw/Voltages/Max', -1) - dbusservice.add_path('/Raw/Voltages/Min', -1) - dbusservice.add_path('/Raw/Voltages/BatteryCapacityWH', -1) - dbusservice.add_path('/Raw/Voltages/BatteryCapacityAH', -1) - dbusservice.add_path('/Raw/Voltages/UpdateTimestamp', -1) - dbusservice.add_path('/Raw/Impedances/CurrentMode1', -1) - dbusservice.add_path('/Raw/Impedances/Current1', -1) - dbusservice.add_path('/Raw/Impedances/Cell1', -1) - dbusservice.add_path('/Raw/Impedances/Cell2', -1) - dbusservice.add_path('/Raw/Impedances/Cell3', -1) - dbusservice.add_path('/Raw/Impedances/Cell4', -1) - dbusservice.add_path('/Raw/Impedances/Cell5', -1) - dbusservice.add_path('/Raw/Impedances/Cell6', -1) - dbusservice.add_path('/Raw/Impedances/Cell7', -1) - dbusservice.add_path('/Raw/Impedances/Cell8', -1) - dbusservice.add_path('/Raw/Impedances/Cell9', -1) - dbusservice.add_path('/Raw/Impedances/Cell10', -1) - dbusservice.add_path('/Raw/Impedances/Cell11', -1) - dbusservice.add_path('/Raw/Impedances/Cell12', -1) - dbusservice.add_path('/Raw/Impedances/Cell13', -1) - dbusservice.add_path('/Raw/Impedances/Cell14', -1) - dbusservice.add_path('/Raw/Impedances/Cell15', -1) - dbusservice.add_path('/Raw/Impedances/Cell16', -1) - dbusservice.add_path('/Raw/Impedances/Cell17', -1) - dbusservice.add_path('/Raw/Impedances/Cell18', -1) - dbusservice.add_path('/Raw/Impedances/Cell19', -1) - dbusservice.add_path('/Raw/Impedances/Cell20', -1) - dbusservice.add_path('/Raw/Impedances/Cell21', -1) - dbusservice.add_path('/Raw/Impedances/Cell22', -1) - dbusservice.add_path('/Raw/Impedances/Cell23', -1) - dbusservice.add_path('/Raw/Impedances/Cell24', -1) - dbusservice.add_path('/Raw/Impedances/Sum', -1) - dbusservice.add_path('/Raw/Impedances/Diff', -1) - dbusservice.add_path('/Raw/Impedances/Max', -1) - dbusservice.add_path('/Raw/Impedances/Min', -1) - dbusservice.add_path('/Raw/Impedances/UpdateTimestamp', -1) - - PACKET_HEADER = 0x24 PACKET_STATUS_CELLS = 0x56 PACKET_STATUS_BMS = 0x57 @@ -822,9 +640,6 @@ def parse_packet(packet): # charge end voltage 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((packet[7]), (packet[8])) @@ -847,12 +662,6 @@ def parse_packet(packet): BMS_STATUS['bms']['current_mode']['value'] = -1 BMS_STATUS['bms']['current_mode']['text'] = "" BMS_STATUS['bms']['current']['text'] = "" - - if args.victron: - dbusservice["/Info/CurrentMode"] = BMS_STATUS['bms']['current_mode']['text'] - dbusservice["/Info/Current"] = BMS_STATUS['bms']['current']['text'] - dbusservice["/Raw/Info/CurrentMode"] = BMS_STATUS['bms']['current_mode']['value'] - dbusservice["/Raw/Info/Current"] = BMS_STATUS['bms']['current']['value'] # current temperatures BMS_STATUS['bms']['temperature']['sensor_t1']['value'] = get_temperature_value((packet[9]), (packet[10])) @@ -860,26 +669,14 @@ def parse_packet(packet): 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: - dbusservice["/Info/Temp/Sensor1"] = BMS_STATUS['bms']['temperature']['sensor_t1']['text'] - dbusservice["/Info/Temp/Sensor2"] = BMS_STATUS['bms']['temperature']['sensor_t2']['text'] - dbusservice["/Raw/Info/Temp/Sensor1"] = BMS_STATUS['bms']['temperature']['sensor_t1']['value'] - dbusservice["/Raw/Info/Temp/Sensor2"] = BMS_STATUS['bms']['temperature']['sensor_t2']['value'] - # soc value 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'] - + # update timestamp current_date = datetime.datetime.now() BMS_STATUS['bms']['timestamp']['value'] = time.time() BMS_STATUS['bms']['timestamp']['text'] = current_date.strftime('%a %d.%m.%Y %H:%M:%S') - if args.victron: - dbusservice["/Info/UpdateTimestamp"] = BMS_STATUS['bms']['timestamp']['text'] - dbusservice["/Raw/Info/UpdateTimestamp"] = BMS_STATUS['bms']['timestamp']['value'] # print (BMS_STATUS) @@ -962,153 +759,81 @@ 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" - 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((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((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((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((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((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((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((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'] - dbusservice["/Raw/Voltages/Cell8"] = BMS_STATUS['voltages']['cell8_voltage']['value'] 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" - 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((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((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((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((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((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((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((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'] - dbusservice["/Raw/Voltages/Cell16"] = BMS_STATUS['voltages']['cell16_voltage']['value'] if (packet_length == PACKET_LENGTH_STATUS_CELLS[2]): # packet from BMS24 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((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((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((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((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((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((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((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'] - dbusservice["/Raw/Voltages/Cell24"] = BMS_STATUS['voltages']['cell24_voltage']['value'] - + # get min/max voltages to calculate the diff @@ -1172,31 +897,15 @@ def parse_packet(packet): BMS_STATUS['voltages']['agg_voltages']['diff']['value'] = BMS_STATUS['voltages']['agg_voltages']['max']['value'] - BMS_STATUS['voltages']['agg_voltages']['min']['value'] BMS_STATUS['voltages']['agg_voltages']['diff']['text'] = "{:.0f}".format(BMS_STATUS['voltages']['agg_voltages']['diff']['value'] * 1000) + "mV" - if args.victron: - dbusservice["/Voltages/Sum"] = BMS_STATUS['voltages']['agg_voltages']['sum']['text'] - dbusservice["/Raw/Voltages/Sum"] = BMS_STATUS['voltages']['agg_voltages']['sum']['value'] - dbusservice["/Voltages/Max"] = BMS_STATUS['voltages']['agg_voltages']['max']['text'] - dbusservice["/Raw/Voltages/Max"] = BMS_STATUS['voltages']['agg_voltages']['max']['value'] - dbusservice["/Voltages/Min"] = BMS_STATUS['voltages']['agg_voltages']['min']['text'] - dbusservice["/Raw/Voltages/Min"] = BMS_STATUS['voltages']['agg_voltages']['min']['value'] - dbusservice["/Voltages/Diff"] = BMS_STATUS['voltages']['agg_voltages']['diff']['text'] - dbusservice["/Raw/Voltages/Diff"] = BMS_STATUS['voltages']['agg_voltages']['diff']['value'] - if (packet_length == PACKET_LENGTH_STATUS_CELLS[0]): # packet from BMS8 # get battery capacity 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((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'] - dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_ah']['value'] elif (packet_length == PACKET_LENGTH_STATUS_CELLS[1]): # packet from BMS16 @@ -1204,15 +913,9 @@ def parse_packet(packet): # get battery capacity 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((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'] - dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_ah']['value'] elif (packet_length == PACKET_LENGTH_STATUS_CELLS[2]): # packet from BMS24 @@ -1220,15 +923,9 @@ def parse_packet(packet): # get battery capacity 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((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'] - dbusservice["/Raw/Voltages/BatteryCapacityWH"] = BMS_STATUS['voltages']['battery_capacity_ah']['value'] @@ -1236,10 +933,7 @@ def parse_packet(packet): current_date = datetime.datetime.now() BMS_STATUS['voltages']['timestamp']['value'] = time.time() BMS_STATUS['voltages']['timestamp']['text'] = current_date.strftime('%a %d.%m.%Y %H:%M:%S') - if args.victron: - dbusservice["/Voltages/UpdateTimestamp"] = BMS_STATUS['voltages']['timestamp']['text'] - dbusservice["/Raw/Voltages/UpdateTimestamp"] = BMS_STATUS['voltages']['timestamp']['value'] - + # print (BMS_STATUS) if (packet_length == PACKET_LENGTH_STATUS_CELLS[0]): # packet from BMS8 @@ -1366,18 +1060,10 @@ def parse_packet(packet): BMS_STATUS['impedances']['current_mode1']['value'] = -1 BMS_STATUS['impedances']['current_mode1']['text'] = "" BMS_STATUS['impedances']['current1']['text'] = "" - if args.victron: - dbusservice["/Impedances/CurrentMode1"] = BMS_STATUS['impedances']['current_mode1']['text'] - dbusservice["/Raw/Impedances/CurrentMode1"] = BMS_STATUS['impedances']['current_mode1']['value'] - dbusservice["/Impedances/Current1"] = BMS_STATUS['impedances']['current1']['text'] - 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((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'] - dbusservice["/Raw/Impedances/Cell"+str(i)] = BMS_STATUS['impedances']['cell'+str(i)+'_impedance']['value'] @@ -1442,24 +1128,11 @@ def parse_packet(packet): BMS_STATUS['impedances']['agg_impedances']['diff']['value'] = BMS_STATUS['impedances']['agg_impedances']['max']['value'] - BMS_STATUS['impedances']['agg_impedances']['min']['value'] BMS_STATUS['impedances']['agg_impedances']['diff']['text'] = "{:.1f}".format(BMS_STATUS['impedances']['agg_impedances']['diff']['value']) + "m" + SPECIAL_DISPLAY_SYMBOLS['ohm'] - if args.victron: - dbusservice["/Impedances/Sum"] = BMS_STATUS['impedances']['agg_impedances']['sum']['text'] - dbusservice["/Raw/Impedances/Sum"] = BMS_STATUS['impedances']['agg_impedances']['sum']['value'] - dbusservice["/Impedances/Max"] = BMS_STATUS['impedances']['agg_impedances']['max']['text'] - dbusservice["/Raw/Impedances/Max"] = BMS_STATUS['impedances']['agg_impedances']['max']['value'] - dbusservice["/Impedances/Min"] = BMS_STATUS['impedances']['agg_impedances']['min']['text'] - dbusservice["/Raw/Impedances/Min"] = BMS_STATUS['impedances']['agg_impedances']['min']['value'] - dbusservice["/Impedances/Diff"] = BMS_STATUS['impedances']['agg_impedances']['diff']['text'] - dbusservice["/Raw/Impedances/Diff"] = BMS_STATUS['impedances']['agg_impedances']['diff']['value'] - # update timestamp current_date = datetime.datetime.now() BMS_STATUS['impedances']['timestamp']['value'] = time.time() BMS_STATUS['impedances']['timestamp']['text'] = current_date.strftime('%a %d.%m.%Y %H:%M:%S') - if args.victron: - dbusservice["/Impedances/UpdateTimestamp"] = BMS_STATUS['impedances']['timestamp']['text'] - dbusservice["/Raw/Impedances/UpdateTimestamp"] = BMS_STATUS['impedances']['timestamp']['value'] logging.info("BMS Impedances " + "][MODE1|" + BMS_STATUS['impedances']['current_mode1']['text'] + @@ -1535,13 +1208,8 @@ def handle_serial_data(test_packet = ''): data_buffer_array = "" serial_packet = "" - if args.victron: - # recheck every second - gobject.timeout_add(1000, handle_serial_data) - except KeyboardInterrupt: - if not args.victron: - raise + pass if args.test: @@ -1551,24 +1219,11 @@ if args.test: print("Test Item End") print("") - # if we registered in testing to dbus, wait until the script is exitted with keyboard interruption - if args.victron: - logging.info("Waiting for keyboard interruption...") - while True: - time.sleep(1) - - else: - if args.victron: - gobject.timeout_add(1000, handle_serial_data) - mainloop = gobject.MainLoop() - mainloop.run() - else: - while True: - print("Test Item Start") - handle_serial_data() - time.sleep(1) - print("Test Item End") - print("") - + while True: + print("Test Item Start") + handle_serial_data() + time.sleep(1) + print("Test Item End") + print("") \ No newline at end of file