Remove Victron support

This commit is contained in:
Yeongdo Park 2020-10-12 23:00:52 -07:00
parent a7daaf77b4
commit 1501db5e9f

View file

@ -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("")