Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- """
- run pylon command:
- # disp pwr
- """
- """
- example:
- /home/gibo/dev/misc/pylon/datalogger-post/dataloggerv2.py --serial-port=/dev/ttyUSB0 --http-post-url=http://nodered.smarthouse.vp.ip.kyrian.cz/pylon-pv-battery-state-record'
- """
- import asyncio
- import logging
- import sys
- import time
- from optparse import OptionParser
- import aiohttp
- import datetime
- import serial
- import threading
- import dataparser
- import json
- root = logging.getLogger()
- root.setLevel(logging.DEBUG)
- handler = logging.StreamHandler(sys.stdout)
- handler.setLevel(logging.DEBUG)
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- handler.setFormatter(formatter)
- root.addHandler(handler)
- parser = OptionParser(usage = '%prog [options]')
- parser.add_option("", "--serial-port", dest="serial_port", help="Pylon RS232 serial port")
- parser.add_option("", "--http-post-url", dest="http_post_url", help="HTTP post url")
- parser.add_option("", "--test", dest="test", action="store_true", default=False, help="HTTP post url")
- (options, args) = parser.parse_args()
- if (not all([options.serial_port, options.http_post_url])):
- print("Not all options given", file = sys.stderr)
- parser.print_help()
- sys.exit(-1)
- #endif
- if (not options.test):
- serialPort = serial.Serial(options.serial_port, 115200, bytesize=8, parity='N', stopbits=1, timeout=0.1)
- #endif
- class G:
- serialDataBuffer = ''
- lastReadTime = 0
- accessLock = threading.Lock()
- dataToSendQueue = None
- #endclass
- g = G()
- def readSerial():
- while (serialPort != None):
- data = serialPort.read(1)
- if (data):
- data = data.decode(errors='ignore')
- #print('readSerial acquire')
- g.accessLock.acquire()
- g.serialDataBuffer += data
- g.lastReadTime = time.time()
- g.accessLock.release()
- #sys.stdout.write(data)
- #sys.stdout.flush()
- #endif
- #endfor
- #enddef
- async def readUntilTimeout(timeout:float):
- res = ''
- startTime = time.time()
- while True:
- if (time.time() - startTime < timeout):
- #print('readUntilTimeout acquire')
- g.accessLock.acquire()
- if (g.serialDataBuffer):
- res += g.serialDataBuffer
- g.serialDataBuffer = ''
- startTime = time.time()
- #endif
- g.accessLock.release()
- else:
- return res
- #endif
- await asyncio.sleep(timeout / 10)
- #endwhile
- #enddef
- async def sendCommand(command: str):
- serialPort.write(("%s\n" % command).encode('utf-8'))
- data = await readUntilTimeout(timeout = 0.1)
- #print("%s" % data, end='', flush=True)
- response = []
- foundStart = False
- for line in data.split("\n"):
- line = line.strip()
- if (not foundStart):
- if (line == "@"):
- foundStart = True
- #endif
- else:
- if (line == "$$" or line == "Command completed successfully"):
- break
- else:
- response.append(line)
- #endif
- #endif
- #endfor
- return '\n'.join(response)
- #enddef
- class CustomJSONEncoder(json.JSONEncoder):
- def default(self, obj):
- if isinstance(obj, datetime.date):
- return obj.strftime('%Y-%m-%d %H:%M:%S')
- #endif
- return json.JSONEncoder.default(self, obj)
- #enddef
- #endclass
- async def sendData(dataType, data):
- while True:
- try:
- async with aiohttp.ClientSession() as session:
- jsonData = json.dumps({'type':dataType, 'data':data}, indent=2, cls=CustomJSONEncoder)
- print(jsonData)
- #break
- async with session.post(options.http_post_url, headers = {'content-type': 'application/json'}, data = jsonData.encode('utf-8'), timeout = 5) as response:
- if (response.status == 200):
- res = await response.json()
- if (res['status'] == 200):
- break
- else:
- raise Exception('Request failed (res: %s)' % res)
- #endif
- else:
- raise Exception('Request failed (response: %s)' % response.status)
- #endif
- #endwith
- #endwith
- except Exception as e:
- print('Error: %s' % repr(e))
- await asyncio.sleep(5)
- #endtry
- #endwhile
- #enddef
- async def processDataQueue():
- while True:
- try:
- #print("Get data item to send")
- dataItem = await g.dataToSendQueue.get()
- g.dataToSendQueue.task_done()
- await sendData(dataItem['type'], dataItem['data'])
- except Exception as e:
- print('Error: %s' % repr(e))
- await asyncio.sleep(0.1)
- #endtry
- #endfor
- #enddef
- class Command:
- def __init__(self, command, interval):
- self.command = command
- self.interval = interval
- self.lastRunTime = 0
- #enddef
- #endclass
- async def readBMS(options):
- startTime = time.time()
- t = threading.Thread(target = readSerial)
- t.start()
- # spustit task s odesilanim dat
- g.dataToSendQueue = asyncio.Queue()
- asyncio.get_running_loop().create_task(processDataQueue())
- commandsToRun = []
- commandsPlan = {
- 'stat' : Command('stat', 60*15),
- 'sysinfo' : Command('sysinfo', 60*60),
- 'bat' : Command('bat', 60*5),
- 'soh' : Command('soh', 60*30),
- 'log' : Command('log', 60*30),
- 'data event' : Command('data event', 60*30),
- 'data history' : Command('data history', 60*30),
- 'data misc' : Command('data misc', 60*30),
- }
- lastReadDataTime = None
- while True:
- try:
- # cist disp data s timeoutem 0.1. Bud se precte cela radka s daty nebo dojde k timeoutu
- data = await readUntilTimeout(timeout = 0.1)
- if (data):
- lastReadDataTime = time.time()
- print("%s" % data, end='', flush=True)
- # kdyby nahodou prislo vice radek najednou, tak je zpracovat vsechny
- for line in data.split("\n"):
- line = line.strip()
- if (line):
- # kazdou radku zparsovat
- parsedData = dataparser.parseData_disp_pwr(line)
- if (parsedData):
- # pridat do fronty k odeslani
- g.dataToSendQueue.put_nowait({'type':'disp_pwr', 'data':parsedData})
- #endif
- #endif
- #endfor
- for command in commandsPlan.values():
- # zkontrolovat zda-li nastal cas na spusteni prikazu
- if (time.time() - command.lastRunTime > command.interval):
- # pokud jeste neni v seznamu prikazu k behu, tak jej pridat na konec
- if (command.command not in commandsToRun):
- commandsToRun.append(command.command)
- #endif
- #endif
- #endfor
- # pokud jsme dostali radku s daty, tak je idealni cas si poslat ostatni prikazy
- # protoze dalsi disp data prijdou az za cca 2s
- startTime = time.time()
- for command in commandsToRun[:]:
- commandsPlan[command].lastRunTime = time.time()
- commandsToRun.remove(command)
- print("\n\n\n----")
- print("Send command: %s" % command)
- data = await sendCommand(command)
- #print(data)
- parseDataFunction = 'parseData_%s' % command.replace(' ', '_')
- if (hasattr(dataparser, parseDataFunction)):
- parsedData = getattr(dataparser, parseDataFunction)(data)
- if (parsedData):
- # pridat do fronty k odeslani
- g.dataToSendQueue.put_nowait({'type':command, 'data':parsedData})
- else:
- print("Unable to parse data (command: %s)\nDATA:\n%s" % (command, data))
- #endif
- else:
- print("Parse data function does not exist (name: %s)\nDATA:\n%s" % (parseDataFunction, data))
- #endif
- print("----\n\n\n")
- # pokud provadime prikazy priliz dlouho, tak skoncit
- if (time.time() - startTime > 1.0 or True):
- break
- #endif
- #endfor
- else:
- # pokud jeste nikdy neprisly data a uz je to 10s od startu tak poslat disp pwr prikaz
- # aby se spustilo posilani dat
- if (lastReadDataTime == None and time.time() - startTime > 10.0):
- print("No incoming data")
- print("Try to send 'disp pwr' command")
- data = await sendCommand("disp pwr")
- print("Response: %s" % data)
- await asyncio.sleep(3)
- # pokud uz to nekdy data cetlo, ale je to 10 minut od posledniho prijeti dat,
- # tak se asi neco posralo, asi restart baterie, tak poslat disp pwr prikaz
- # a pockat pro zichr 5 minut
- elif (lastReadDataTime != None and time.time() - lastReadDataTime > 600.0):
- print("No incoming data")
- print("Try to send 'disp pwr' command")
- data = await sendCommand("disp pwr")
- print("Response: %s" % data)
- await asyncio.sleep(300)
- #endif
- #endif
- except Exception as e:
- print(e)
- await asyncio.sleep(1)
- #endtry
- #endwhile
- #enddef
- def test():
- if (0):
- print(json.dumps(dataparser.parseData_bat("""
- Time: 2023-03-13 13:10:10
- A.Tempr: 23250
- C.Curr : 18500 mA
- D.Curr : -18500 mA
- B.State: Idle
- BalVolt: 3360
- Bat Volt Curr Tempr V.State T.State AH(mAH) WH(mWH) Bal
- 0 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 1 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 2 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 3 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 4 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 5 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 6 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 7 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 8 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 9 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 10 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 11 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 12 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 13 3304 0 23000 Normal Normal 67% 24815 66% 78259 N
- 14 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 15 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 16 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 17 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 18 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 19 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 20 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 21 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 22 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 23 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 24 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 25 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 26 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 27 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 28 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 29 3301 0 23000 Normal Normal 67% 24815 66% 78259 N
- 30 3301 0 23000 Normal Normal 67% 24815 66% 78259 N
- 31 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 32 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 33 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 34 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 35 3301 0 23000 Normal Normal 67% 24815 66% 78259 N
- 36 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 37 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 38 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 39 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 40 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 41 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 42 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 43 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 44 3301 0 23000 Normal Normal 67% 24815 66% 78259 N
- 45 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 46 3301 0 23000 Normal Normal 67% 24815 66% 78259 N
- 47 3305 0 23000 Normal Normal 67% 24815 66% 78260 N
- 48 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 49 3304 0 23000 Normal Normal 67% 24815 66% 78259 N
- 50 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 51 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 52 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 53 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 54 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 55 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 56 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 57 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 58 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 59 3300 0 23000 Normal Normal 67% 24815 66% 78259 N
- 60 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 61 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 62 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 63 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 64 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 65 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 66 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 67 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 68 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 69 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 70 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 71 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 72 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 73 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 74 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 75 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 76 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 77 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 78 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 79 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 80 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 81 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 82 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 83 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 84 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 85 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 86 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 87 3303 0 23000 Normal Normal 67% 24815 66% 78259 N
- 88 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 89 3302 0 23000 Normal Normal 67% 24815 66% 78259 N
- 90 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 91 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 92 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 93 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 94 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 95 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 96 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 97 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 98 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 99 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 100 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 101 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 102 3303 0 24000 Normal Normal 67% 24815 66% 78259 N
- 103 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 104 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 105 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 106 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 107 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 108 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 109 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 110 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 111 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 112 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 113 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 114 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 115 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 116 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 117 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 118 3302 0 24000 Normal Normal 67% 24815 66% 78259 N
- 119 3301 0 24000 Normal Normal 67% 24815 66% 78259 N
- """
- ), indent=2, cls=CustomJSONEncoder))
- #endif
- if (0):
- print(json.dumps(dataparser.parseData_soh("""
- Battery Voltage SOHCount SOHStatus
- 0 3492 0 Normal
- 1 3491 0 Normal
- 2 3491 0 Normal
- 3 3492 0 Normal
- 4 3490 0 Normal
- 5 3492 0 Normal
- 6 3489 0 Normal
- 7 3488 0 Normal
- 8 3489 0 Normal
- 9 3490 0 Normal
- 10 3490 0 Normal
- 11 3491 0 Normal
- 12 3491 0 Normal
- 13 3492 0 Normal
- 14 3489 0 Normal
- 15 3489 0 Normal
- 16 3492 0 Normal
- 17 3492 0 Normal
- 18 3489 0 Normal
- 19 3490 0 Normal
- 20 3489 0 Normal
- 21 3489 0 Normal
- 22 3489 0 Normal
- 23 3490 0 Normal
- 24 3489 0 Normal
- 25 3490 0 Normal
- 26 3491 0 Normal
- 27 3490 0 Normal
- 28 3490 0 Normal
- 29 3489 0 Normal
- 30 3491 0 Normal
- 31 3491 0 Normal
- 32 3491 0 Normal
- 33 3491 0 Normal
- 34 3491 0 Normal
- 35 3490 0 Normal
- 36 3490 0 Normal
- 37 3490 0 Normal
- 38 3490 0 Normal
- 39 3491 0 Normal
- 40 3490 0 Normal
- 41 3491 0 Normal
- 42 3492 0 Normal
- 43 3491 0 Normal
- 44 3490 0 Normal
- 45 3491 0 Normal
- 46 3491 0 Normal
- 47 3491 0 Normal
- 48 3490 0 Normal
- 49 3490 0 Normal
- 50 3491 0 Normal
- 51 3490 0 Normal
- 52 3488 0 Normal
- 53 3479 0 Normal
- 54 3490 0 Normal
- 55 3490 0 Normal
- 56 3491 0 Normal
- 57 3490 0 Normal
- 58 3490 0 Normal
- 59 3491 0 Normal
- 60 3492 0 Normal
- 61 3492 0 Normal
- 62 3491 0 Normal
- 63 3492 0 Normal
- 64 3492 0 Normal
- 65 3491 0 Normal
- 66 3492 0 Normal
- 67 3490 0 Normal
- 68 3491 0 Normal
- 69 3492 0 Normal
- 70 3491 0 Normal
- 71 3491 0 Normal
- 72 3492 0 Normal
- 73 3492 0 Normal
- 74 3492 0 Normal
- 75 3490 0 Normal
- 76 3491 0 Normal
- 77 3491 0 Normal
- 78 3491 0 Normal
- 79 3492 0 Normal
- 80 3491 0 Normal
- 81 3491 0 Normal
- 82 3490 0 Normal
- 83 3491 0 Normal
- 84 3491 0 Normal
- 85 3491 0 Normal
- 86 3492 0 Normal
- 87 3492 0 Normal
- 88 3492 0 Normal
- 89 3491 0 Normal
- 90 3493 0 Normal
- 91 3493 0 Normal
- 92 3493 0 Normal
- 93 3493 0 Normal
- 94 3493 0 Normal
- 95 3493 0 Normal
- 96 3493 0 Normal
- 97 3493 0 Normal
- 98 3493 0 Normal
- 99 3493 0 Normal
- 100 3493 0 Normal
- 101 3493 0 Normal
- 102 3493 0 Normal
- 103 3493 0 Normal
- 104 3493 0 Normal
- 105 3491 0 Normal
- 106 3491 0 Normal
- 107 3492 0 Normal
- 108 3492 0 Normal
- 109 3492 0 Normal
- 110 3492 0 Normal
- 111 3492 0 Normal
- 112 3492 0 Normal
- 113 3492 0 Normal
- 114 3492 0 Normal
- 115 3492 0 Normal
- 116 3492 0 Normal
- 117 3492 0 Normal
- 118 3492 0 Normal
- 119 3491 0 Normal
- """
- ), indent=2))
- #endif
- if (0):
- print(json.dumps(dataparser.parseData_log("""
- Index : 19
- Time : 23-03-15 07:59:02
- ModID : BMM
- Code : 744e
- Info : The device start charging.
- Index : 18
- Time : 23-03-14 18:22:01
- ModID : BMM
- Code : 0
- Info : The device start discharging.
- Index : 17
- Time : 23-03-14 18:01:31
- ModID : BMM
- Code : 0
- Info : The device start discharging.
- """
- ), indent=2, cls=CustomJSONEncoder))
- #endif
- if (0):
- print(json.dumps(dataparser.parseData_data_event("""
- -----------------------------------------------
- Item Index : 31
- Time : 23-03-13 07:28:58
- Voltage : 395387 mV
- Current : 0 mA
- Temperature : 35000 mC
- Percent : 66 %
- Total Coulomb : 37000 mAH
- Max Voltage : 438000 mV
- Base State : SysError
- Volt. State : Normal
- Curr. State : Normal
- Tempr. State : Normal
- Coul. Status : Normal
- Power Events : 0x10000000 SYSERR
- Unit Events : 0x0
- Bat Events : 0x0
- Bat Protect ENA : BOV BHV BLV BUV BSHUT BOT BHT BLT BUT
- Unit Protect ENA: UOV UHV ULV UUV USHUT UHT
- Pwr Protect ENA : POV PHV PLV PUV PSHUT PHT COC2 COC COCA DOCA DOC DOC2 SC LCOUL
- System Fault : 0x10000 RelayAdhesion
- Fault SubCode : 0x0
- -----------------------------------------------
- Battery Volt Tempr Volt. State Temp. State Coulomb
- 0 3295 23000 Normal Normal 66%
- 1 3295 23000 Normal Normal 66%
- 2 3295 23000 Normal Normal 66%
- 3 3296 23000 Normal Normal 66%
- 4 3295 23000 Normal Normal 66%
- 5 3295 23000 Normal Normal 66%
- 6 3295 23000 Normal Normal 66%
- 7 3295 23000 Normal Normal 66%
- 8 3295 23000 Normal Normal 66%
- 9 3295 23000 Normal Normal 66%
- 10 3296 23000 Normal Normal 66%
- 11 3295 23000 Normal Normal 66%
- 12 3295 23000 Normal Normal 66%
- 13 3296 23000 Normal Normal 66%
- 14 3294 23000 Normal Normal 66%
- 15 3296 23000 Normal Normal 66%
- 16 3296 23000 Normal Normal 66%
- 17 3295 23000 Normal Normal 66%
- 18 3295 23000 Normal Normal 66%
- 19 3295 23000 Normal Normal 66%
- 20 3295 23000 Normal Normal 66%
- 21 3295 23000 Normal Normal 66%
- 22 3295 23000 Normal Normal 66%
- 23 3295 23000 Normal Normal 66%
- 24 3295 23000 Normal Normal 66%
- 25 3295 23000 Normal Normal 66%
- 26 3295 23000 Normal Normal 66%
- 27 3295 23000 Normal Normal 66%
- 28 3295 23000 Normal Normal 66%
- 29 3294 23000 Normal Normal 66%
- 30 3294 23000 Normal Normal 66%
- 31 3295 23000 Normal Normal 66%
- 32 3295 23000 Normal Normal 66%
- 33 3295 23000 Normal Normal 66%
- 34 3295 23000 Normal Normal 66%
- 35 3294 23000 Normal Normal 66%
- 36 3295 23000 Normal Normal 66%
- 37 3295 23000 Normal Normal 66%
- 38 3295 23000 Normal Normal 66%
- 39 3295 23000 Normal Normal 66%
- 40 3295 23000 Normal Normal 66%
- 41 3295 23000 Normal Normal 66%
- 42 3294 23000 Normal Normal 66%
- 43 3295 23000 Normal Normal 66%
- 44 3294 23000 Normal Normal 66%
- 45 3295 23000 Normal Normal 66%
- 46 3294 23000 Normal Normal 66%
- 47 3296 23000 Normal Normal 66%
- 48 3295 23000 Normal Normal 66%
- 49 3296 23000 Normal Normal 66%
- 50 3295 23000 Normal Normal 66%
- 51 3295 23000 Normal Normal 66%
- 52 3295 23000 Normal Normal 66%
- 53 3295 23000 Normal Normal 66%
- 54 3295 23000 Normal Normal 66%
- 55 3294 23000 Normal Normal 66%
- 56 3295 23000 Normal Normal 66%
- 57 3295 23000 Normal Normal 66%
- 58 3296 23000 Normal Normal 66%
- 59 3293 23000 Normal Normal 66%
- 60 3295 23000 Normal Normal 66%
- 61 3295 23000 Normal Normal 66%
- 62 3295 23000 Normal Normal 66%
- 63 3294 23000 Normal Normal 66%
- 64 3295 23000 Normal Normal 66%
- 65 3294 23000 Normal Normal 66%
- 66 3295 23000 Normal Normal 66%
- 67 3295 23000 Normal Normal 66%
- 68 3294 23000 Normal Normal 66%
- 69 3295 23000 Normal Normal 66%
- 70 3295 23000 Normal Normal 66%
- 71 3295 23000 Normal Normal 66%
- 72 3295 23000 Normal Normal 66%
- 73 3295 23000 Normal Normal 66%
- 74 3294 23000 Normal Normal 66%
- 75 3295 23000 Normal Normal 66%
- 76 3295 23000 Normal Normal 66%
- 77 3294 23000 Normal Normal 66%
- 78 3295 23000 Normal Normal 66%
- 79 3295 23000 Normal Normal 66%
- 80 3295 23000 Normal Normal 66%
- 81 3295 23000 Normal Normal 66%
- 82 3295 23000 Normal Normal 66%
- 83 3295 23000 Normal Normal 66%
- 84 3295 23000 Normal Normal 66%
- 85 3295 23000 Normal Normal 66%
- 86 3295 23000 Normal Normal 66%
- 87 3295 23000 Normal Normal 66%
- 88 3295 23000 Normal Normal 66%
- 89 3294 23000 Normal Normal 66%
- 90 3295 24000 Normal Normal 66%
- 91 3295 24000 Normal Normal 66%
- 92 3295 24000 Normal Normal 66%
- 93 3295 24000 Normal Normal 66%
- 94 3295 24000 Normal Normal 66%
- 95 3295 24000 Normal Normal 66%
- 96 3295 24000 Normal Normal 66%
- 97 3295 24000 Normal Normal 66%
- 98 3295 24000 Normal Normal 66%
- 99 3295 24000 Normal Normal 66%
- 100 3295 24000 Normal Normal 66%
- 101 3295 24000 Normal Normal 66%
- 102 3295 24000 Normal Normal 66%
- 103 3295 24000 Normal Normal 66%
- 104 3295 24000 Normal Normal 66%
- 105 3295 24000 Normal Normal 66%
- 106 3294 24000 Normal Normal 66%
- 107 3295 24000 Normal Normal 66%
- 108 3295 24000 Normal Normal 66%
- 109 3295 24000 Normal Normal 66%
- 110 3295 24000 Normal Normal 66%
- 111 3294 24000 Normal Normal 66%
- 112 3294 24000 Normal Normal 66%
- 113 3295 24000 Normal Normal 66%
- 114 3295 24000 Normal Normal 66%
- 115 3295 24000 Normal Normal 66%
- 116 3295 24000 Normal Normal 66%
- 117 3295 24000 Normal Normal 66%
- 118 3295 24000 Normal Normal 66%
- 119 3293 24000 Normal Normal 66%
- -----------------------------------------------
- Unit Volt Tempr BTLow BTHigh BVLow BVHigh Volt. State Temp. State Coulomb
- 0 98853 23000 23000 23000 3294 3296 Normal Normal 66%
- 1 98845 23000 23000 23000 3293 3296 Normal Normal 66%
- 2 98844 23000 23000 23000 3294 3295 Normal Normal 66%
- 3 98845 24000 24000 24000 3293 3295 Normal Normal 66%
- """
- ), indent=2, cls=CustomJSONEncoder))
- #endif
- if (1):
- print(json.dumps(dataparser.parseData_data_history("""
- -----------------------------------------------
- Rec Item Index : 1023
- Time : 23-03-15 09:15:16
- Voltage : 409326 mV
- Current : 11729 mA
- Temperature : 35000 mC
- Percent : 89 %
- Total Coulomb : 37000 mAH
- Max Voltage : 438000 mV
- Base State : Charge
- Volt. State : Normal
- Curr. State : Normal
- Tempr. State : Normal
- Coul. Status : Normal
- Power Events : 0x0
- Unit Events : 0x0
- Bat Events : 0x0
- Bat Protect ENA : BOV BHV BLV BUV BSHUT BOT BHT BLT BUT
- Unit Protect ENA: UOV UHV ULV UUV USHUT UHT
- Pwr Protect ENA : POV PHV PLV PUV PSHUT PHT COC2 COC COCA DOCA DOC DOC2 SC LCOUL
- System Fault : 0x0
- Fault SubCode : 0x0
- -----------------------------------------------
- Battery Volt Tempr Volt. State Temp. State Coulomb
- 0 3413 24000 Normal Normal 91%
- 1 3412 24000 Normal Normal 90%
- 2 3410 24000 Normal Normal 89%
- 3 3411 24000 Normal Normal 89%
- 4 3412 24000 Normal Normal 90%
- 5 3411 24000 Normal Normal 89%
- 6 3410 24000 Normal Normal 89%
- 7 3413 24000 Normal Normal 91%
- 8 3413 24000 Normal Normal 91%
- 9 3411 24000 Normal Normal 89%
- 10 3412 24000 Normal Normal 89%
- 11 3411 24000 Normal Normal 89%
- 12 3412 24000 Normal Normal 89%
- 13 3411 24000 Normal Normal 89%
- 14 3411 24000 Normal Normal 90%
- 15 3413 24000 Normal Normal 91%
- 16 3411 24000 Normal Normal 89%
- 17 3411 24000 Normal Normal 89%
- 18 3411 24000 Normal Normal 89%
- 19 3411 24000 Normal Normal 89%
- 20 3412 24000 Normal Normal 90%
- 21 3411 24000 Normal Normal 89%
- 22 3414 24000 Normal Normal 91%
- 23 3413 24000 Normal Normal 92%
- 24 3413 24000 Normal Normal 90%
- 25 3412 24000 Normal Normal 89%
- 26 3412 24000 Normal Normal 90%
- 27 3412 24000 Normal Normal 90%
- 28 3411 24000 Normal Normal 89%
- 29 3411 24000 Normal Normal 89%
- 30 3413 24000 Normal Normal 92%
- 31 3412 24000 Normal Normal 89%
- 32 3411 24000 Normal Normal 89%
- 33 3412 24000 Normal Normal 89%
- 34 3410 24000 Normal Normal 89%
- 35 3411 24000 Normal Normal 89%
- 36 3411 24000 Normal Normal 89%
- 37 3412 23000 Normal Normal 90%
- 38 3414 23000 Normal Normal 92%
- 39 3412 23000 Normal Normal 89%
- 40 3411 23000 Normal Normal 89%
- 41 3412 23000 Normal Normal 90%
- 42 3411 23000 Normal Normal 89%
- 43 3412 23000 Normal Normal 90%
- 44 3413 23000 Normal Normal 90%
- 45 3414 24000 Normal Normal 91%
- 46 3411 24000 Normal Normal 89%
- 47 3413 24000 Normal Normal 90%
- 48 3413 24000 Normal Normal 90%
- 49 3413 24000 Normal Normal 90%
- 50 3412 24000 Normal Normal 89%
- 51 3411 24000 Normal Normal 89%
- 52 3413 23000 Normal Normal 91%
- 53 3414 23000 Normal Normal 92%
- 54 3410 23000 Normal Normal 89%
- 55 3411 23000 Normal Normal 89%
- 56 3412 23000 Normal Normal 90%
- 57 3412 23000 Normal Normal 89%
- 58 3411 23000 Normal Normal 89%
- 59 3411 23000 Normal Normal 89%
- 60 3413 24000 Normal Normal 92%
- 61 3411 24000 Normal Normal 89%
- 62 3411 24000 Normal Normal 89%
- 63 3410 24000 Normal Normal 89%
- 64 3411 24000 Normal Normal 89%
- 65 3410 24000 Normal Normal 89%
- 66 3411 24000 Normal Normal 89%
- 67 3412 24000 Normal Normal 90%
- 68 3413 24000 Normal Normal 91%
- 69 3411 24000 Normal Normal 89%
- 70 3411 24000 Normal Normal 89%
- 71 3411 24000 Normal Normal 89%
- 72 3411 24000 Normal Normal 89%
- 73 3410 24000 Normal Normal 89%
- 74 3412 24000 Normal Normal 89%
- 75 3413 24000 Normal Normal 91%
- 76 3410 24000 Normal Normal 89%
- 77 3410 24000 Normal Normal 89%
- 78 3410 24000 Normal Normal 89%
- 79 3410 24000 Normal Normal 89%
- 80 3410 24000 Normal Normal 89%
- 81 3411 24000 Normal Normal 89%
- 82 3413 24000 Normal Normal 91%
- 83 3414 24000 Normal Normal 92%
- 84 3411 24000 Normal Normal 89%
- 85 3410 24000 Normal Normal 89%
- 86 3411 24000 Normal Normal 89%
- 87 3411 24000 Normal Normal 89%
- 88 3411 24000 Normal Normal 89%
- 89 3411 24000 Normal Normal 89%
- 90 3411 25000 Normal Normal 90%
- 91 3410 25000 Normal Normal 89%
- 92 3409 25000 Normal Normal 89%
- 93 3409 25000 Normal Normal 89%
- 94 3409 25000 Normal Normal 89%
- 95 3410 25000 Normal Normal 89%
- 96 3409 25000 Normal Normal 89%
- 97 3410 24000 Normal Normal 89%
- 98 3412 24000 Normal Normal 90%
- 99 3410 24000 Normal Normal 89%
- 100 3410 24000 Normal Normal 89%
- 101 3409 24000 Normal Normal 89%
- 102 3410 24000 Normal Normal 89%
- 103 3409 24000 Normal Normal 89%
- 104 3410 24000 Normal Normal 89%
- 105 3410 25000 Normal Normal 89%
- 106 3408 25000 Normal Normal 89%
- 107 3408 25000 Normal Normal 89%
- 108 3409 25000 Normal Normal 89%
- 109 3408 25000 Normal Normal 89%
- 110 3409 25000 Normal Normal 89%
- 111 3409 25000 Normal Normal 89%
- 112 3410 24000 Normal Normal 89%
- 113 3411 24000 Normal Normal 90%
- 114 3408 24000 Normal Normal 89%
- 115 3409 24000 Normal Normal 89%
- 116 3409 24000 Normal Normal 89%
- 117 3409 24000 Normal Normal 89%
- 118 3410 24000 Normal Normal 89%
- 119 3409 24000 Normal Normal 89%
- -----------------------------------------------
- Unit Volt Tempr BTLow BTHigh BVLow BVHigh Volt. State Temp. State Coulomb
- 0 102351 24000 24000 24000 3410 3414 Normal Normal 89%
- 1 102358 23000 23000 24000 3410 3414 Normal Normal 89%
- 2 102334 24000 24000 24000 3410 3414 Normal Normal 89%
- 3 102283 24000 24000 25000 3408 3412 Normal Normal 89%
- """
- ), indent=2, cls=CustomJSONEncoder))
- #endif
- #enddef
- if (not options.test):
- asyncio.run(readBMS(options))
- else:
- test()
- #enddef
Advertisement
Add Comment
Please, Sign In to add comment