def main(): print (sys.argv) if len(sys.argv) == 2: sendcmd(sys.argv[1]) elif len(sys.argv) == 3: sendcmd(sys.argv[1],sys.argv[2]) elif len(sys.argv) == 1: print ('Enter BMS port address option [3]') print ('(1) /dev/ttyUSB0') print ('(2) /dev/ttyUSB1') print ('(3) other') port=int(getcmd()) if port==1: port='/dev/ttyUSB0' elif port == 2: port='/dev/ttyUSB1' else: port=str(input("Enter port name>")) while True: bmscore.openbms(port) print('Enter option') print('(1) Load all config data from BMS to memory') print('(2) Read all config data from disk to memory') print('(3) Write all config data from memory to BMS') print('(4) Write all config data from memory to disk') print('(5) Dump all config data in memory') print('(6) Dump raw config data in memory') print('(7) Read/Write config item in memory') print('(8) Read/Write single register in memory and on BMS PCB') print('(9) Read BMS data') print('(10) Switch charge/discharge FETs') cmd=int(getcmd()) if cmd==1: bmscore.configitems(bmscore.fullconfiglist,port) elif cmd==2: file=str(input("Enter filename>")) bmscore.configinmem=bmscore.rdjson(file) elif cmd==3: bmscore.configitems(bmscore.fullconfiglist,port,write=True) elif cmd==4: file=str(input("Enter filename>")) bmscore.wrjson(file,bmscore.configinmem) elif cmd ==5: count = 0 for i in bmscore.configinmem: print ('{}={}{}'.format(i,bmscore.configinmem[i]['value'],bmscore.configinmem[i]['units'])) count=count+1 if count%30==0: x=input("press return for next page") elif cmd==7: changereg() elif cmd==6: count=0 for i in bmscore.configinmem: print (i,bmscore.configinmem[i]) count=count+1 if count%30==0: x=input("press return for next page") elif cmd==8: reg=[] reg.append(changereg()) if reg!=[None]: bmscore.configitems(reg,port,write=True) elif cmd==9: getdat(port) elif cmd ==10: switchfets(port)
def main(): print (sys.argv) if len(sys.argv) == 2: sendcmd(sys.argv[1]) elif len(sys.argv) == 3: sendcmd(sys.argv[1],sys.argv[2]) elif len(sys.argv) == 1: print ('Enter BMS port address option [3]') print ('(1) /dev/ttyUSB0') print ('(2) /dev/ttyUSB1') print ('(3) other') port=int(getcmd()) if port==1: port='/dev/ttyUSB0' elif port == 2: port='/dev/ttyUSB1' else: port=str(input("Enter port name>")) while True: bmscore.openbms(port) print('Enter option') print('(1) Load all config data from BMS to memory') print('(2) Read all config data from disk to memory') print('(3) Write all config data from memory to BMS') print('(4) Write all config data from memory to disk') print('(5) Dump all config data in memory') print('(6) Dump raw config data in memory') print('(7) Read/Write config item in memory') print('(8) Read/Write single register in memory and on BMS PCB') print('(9) Read BMS data') cmd=int(getcmd()) if cmd==1: bmscore.configitems(bmscore.fullconfiglist,port) elif cmd==2: file=str(input("Enter filename>")) bmscore.configinmem=bmscore.rdjson(file) elif cmd==3: bmscore.configitems(bmscore.fullconfiglist,port,write=True) elif cmd==4: file=str(input("Enter filename>")) bmscore.wrjson(file,bmscore.configinmem) elif cmd ==5: count = 0 for i in bmscore.configinmem: print ('{}={}{}'.format(i,bmscore.configinmem[i]['value'],bmscore.configinmem[i]['units'])) count=count+1 if count%30==0: x=input("press return for next page") elif cmd==7: changereg() elif cmd==6: count=0 for i in bmscore.configinmem: print (i,bmscore.configinmem[i]) count=count+1 if count%30==0: x=input("press return for next page") elif cmd==8: reg=[] reg.append(changereg()) if reg!=[None]: bmscore.configitems(reg,port,write=True) elif cmd==9: getdat(port)
def main(): print(sys.argv) if len(sys.argv) == 2: sendcmd(sys.argv[1]) elif len(sys.argv) == 3: sendcmd(sys.argv[1], sys.argv[2]) elif len(sys.argv) == 1: print('Enter BMS port address option [3]') print('(1) /dev/ttyUSB0') print('(2) /dev/ttyUSB1') print('(3) other') port = int(getcmd()) if port == 1: port = '/dev/ttyUSB0' elif port == 2: port = '/dev/ttyUSB1' else: port = str(input("Enter port name>")) while True: bmscore.openbms(port) print('Enter option') print('(1) Load all config data from BMS to memory') print('(2) Read all config data from disk to memory') print('(3) Write all config data from memory to BMS') print('(4) Write all config data from memory to disk') print('(5) Dump all config data in memory') print('(6) Dump raw config data in memory') print('(7) Read/Write config item in memory') print('(8) Read/Write single register in memory and on BMS PCB') print('(9) Read BMS data') print('(10) Switch charge/discharge FETs') print('(11) Calibrate BMS') cmd = int(getcmd()) if cmd == 1: bmscore.configitems(bmscore.fullconfiglist, port) elif cmd == 2: file = str(input("Enter filename>")) bmscore.configinmem = bmscore.rdjson(file) elif cmd == 3: bmscore.configitems(bmscore.fullconfiglist, port, write=True) elif cmd == 4: file = str(input("Enter filename>")) bmscore.wrjson(file, bmscore.configinmem) elif cmd == 5: count = 0 for i in bmscore.configinmem: print ('{}={}{} {}'.format \ (i,bmscore.configinmem[i]['value'],bmscore.configinmem[i]['units'],bmscore.configinmem[i]['comment'])) count = count + 1 if count % 30 == 0: x = input("press return for next page") elif cmd == 7: reg = enterreg() chgreg(reg) elif cmd == 6: count = 0 for i in bmscore.configinmem: print(i, bmscore.configinmem[i]) count = count + 1 if count % 30 == 0: x = input("press return for next page") elif cmd == 8: reg = enterreg() if reg[[*reg][0]]: chgreg(reg) bmscore.configitems(reg, port, write=True) elif cmd == 9: getdat(port) elif cmd == 10: switchfets(port) elif cmd == 11: print('Enter Item to Calibrate?') print('(1) Cell Voltages') print('(2) Battery Current') item = int(getcmd()) if item == 1: item = input("Enter cell number/s e.g. '1-4,5'?> ") result = set() for part in item.split(','): x = part.split('-') result.update(range(int(x[0]), int(x[-1]) + 1)) celllist = sorted(result) cellvolts = int(input("Enter cell voltage/s in mV?> ")) reglist = {} for i in range(len(celllist)): reg = findregname( str.upper(format(celllist[i] + 0xAF, '02x'))) reglist[reg] = cellvolts chgreg(reglist) bmscore.configitems(reglist, port, write=True, calibrate=True) elif item == 2: print("Enter current type?> ") print('(1) Idle Current') print('(2) Charge Current') print('(3) Discharge Current') item = int(getcmd()) if item == 1: reg = 'CalibrateIdleA' elif item == 2: reg = 'CalibrateChgA' elif item == 3: reg = 'CalibrateDchgA' current = int(input("Enter Measured Current in A> ")) reginfo = {reg: current} chgreg(reginfo) bmscore.configitems(reginfo, port, write=True, calibrate=True)
# many inspiration got from here https://endless-sphere.com/forums/viewtopic.php?t=91672 # and basic communication is based on this https://github.com/simat/BatteryMonitor/wiki import bmscore from bms import Bms from Oled import Oled from Loop import Loop import sys import json import signal from twisted.python import log from twisted.internet import reactor from autobahn.twisted.websocket import WebSocketServerProtocol, WebSocketServerFactory protocol_config = bmscore.rdjson("protocolConfig.json") ser = bmscore.openbms() bms = Bms(ser, protocol_config) display = Oled(128, 64, bms) display.splash("BMS", bms.vendor) def signal_handler(signal, frame): global keep_running keep_running = False loop.exit() print("Received SIGINT - Shutting down") reactor.stop()