josefkyrian

pylon data sender

Oct 9th, 2023
1,076
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 40.41 KB | None | 0 0
  1. #!/usr/bin/python3
  2. """
  3. run pylon command:
  4. # disp pwr
  5. """
  6.  
  7. """
  8. example:
  9. /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'
  10. """
  11.  
  12. import asyncio
  13. import logging
  14. import sys
  15. import time
  16. from optparse import OptionParser
  17. import aiohttp
  18. import datetime
  19. import serial
  20. import threading
  21. import dataparser
  22. import json
  23.  
  24.  
  25. root = logging.getLogger()
  26. root.setLevel(logging.DEBUG)
  27.  
  28. handler = logging.StreamHandler(sys.stdout)
  29. handler.setLevel(logging.DEBUG)
  30. formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  31. handler.setFormatter(formatter)
  32. root.addHandler(handler)
  33.  
  34.  
  35. parser = OptionParser(usage = '%prog [options]')
  36. parser.add_option("", "--serial-port", dest="serial_port", help="Pylon RS232 serial port")
  37. parser.add_option("", "--http-post-url", dest="http_post_url", help="HTTP post url")
  38. parser.add_option("", "--test", dest="test", action="store_true", default=False, help="HTTP post url")
  39. (options, args) = parser.parse_args()
  40.  
  41. if (not all([options.serial_port, options.http_post_url])):
  42.     print("Not all options given", file = sys.stderr)
  43.     parser.print_help()
  44.     sys.exit(-1)
  45. #endif
  46.  
  47. if (not options.test):
  48.     serialPort = serial.Serial(options.serial_port, 115200, bytesize=8, parity='N', stopbits=1, timeout=0.1)
  49. #endif
  50.  
  51.  
  52. class G:
  53.     serialDataBuffer = ''
  54.     lastReadTime = 0
  55.     accessLock = threading.Lock()
  56.     dataToSendQueue = None
  57. #endclass
  58.  
  59. g = G()
  60.  
  61.  
  62. def readSerial():
  63.     while (serialPort != None):
  64.         data = serialPort.read(1)
  65.         if (data):
  66.             data = data.decode(errors='ignore')
  67.  
  68.             #print('readSerial acquire')
  69.             g.accessLock.acquire()
  70.             g.serialDataBuffer += data
  71.             g.lastReadTime = time.time()
  72.             g.accessLock.release()
  73.            
  74.             #sys.stdout.write(data)
  75.             #sys.stdout.flush()
  76.         #endif
  77.     #endfor
  78. #enddef
  79.  
  80. async def readUntilTimeout(timeout:float):
  81.     res = ''
  82.  
  83.     startTime = time.time()
  84.     while True:
  85.         if (time.time() - startTime < timeout):
  86.             #print('readUntilTimeout acquire')
  87.             g.accessLock.acquire()
  88.             if (g.serialDataBuffer):
  89.                 res += g.serialDataBuffer
  90.                 g.serialDataBuffer = ''
  91.                 startTime = time.time()
  92.             #endif
  93.             g.accessLock.release()
  94.         else:
  95.             return res
  96.         #endif
  97.         await asyncio.sleep(timeout / 10)
  98.     #endwhile
  99. #enddef
  100.  
  101. async def sendCommand(command: str):
  102.     serialPort.write(("%s\n" % command).encode('utf-8'))
  103.  
  104.     data = await readUntilTimeout(timeout = 0.1)
  105.     #print("%s" % data, end='', flush=True)
  106.  
  107.     response = []
  108.     foundStart = False
  109.     for line in data.split("\n"):
  110.         line = line.strip()
  111.         if (not foundStart):
  112.             if (line == "@"):
  113.                 foundStart = True
  114.             #endif
  115.         else:
  116.             if (line == "$$" or line == "Command completed successfully"):
  117.                 break
  118.             else:
  119.                 response.append(line)
  120.             #endif
  121.         #endif
  122.     #endfor
  123.     return '\n'.join(response)
  124. #enddef
  125.  
  126. class CustomJSONEncoder(json.JSONEncoder):
  127.     def default(self, obj):
  128.         if isinstance(obj, datetime.date):
  129.             return obj.strftime('%Y-%m-%d %H:%M:%S')
  130.         #endif
  131.         return json.JSONEncoder.default(self, obj)
  132.     #enddef
  133. #endclass
  134.  
  135. async def sendData(dataType, data):
  136.     while True:
  137.         try:
  138.             async with aiohttp.ClientSession() as session:
  139.                 jsonData = json.dumps({'type':dataType, 'data':data}, indent=2, cls=CustomJSONEncoder)
  140.                 print(jsonData)
  141.                 #break
  142.                 async with session.post(options.http_post_url, headers = {'content-type': 'application/json'}, data = jsonData.encode('utf-8'), timeout = 5) as response:
  143.                     if (response.status == 200):
  144.                         res = await response.json()
  145.                         if (res['status'] == 200):
  146.                             break
  147.                         else:
  148.                             raise Exception('Request failed (res: %s)' % res)
  149.                         #endif
  150.                     else:
  151.                         raise Exception('Request failed (response: %s)' % response.status)
  152.                     #endif
  153.                 #endwith
  154.             #endwith
  155.         except Exception as e:
  156.             print('Error: %s' % repr(e))
  157.             await asyncio.sleep(5)
  158.         #endtry
  159.     #endwhile
  160. #enddef
  161.  
  162. async def processDataQueue():
  163.     while True:
  164.         try:
  165.             #print("Get data item to send")
  166.             dataItem = await g.dataToSendQueue.get()
  167.             g.dataToSendQueue.task_done()
  168.  
  169.             await sendData(dataItem['type'], dataItem['data'])
  170.         except Exception as e:
  171.             print('Error: %s' % repr(e))
  172.             await asyncio.sleep(0.1)
  173.         #endtry
  174.     #endfor
  175. #enddef
  176.  
  177. class Command:
  178.     def __init__(self, command, interval):
  179.         self.command = command
  180.         self.interval = interval
  181.         self.lastRunTime = 0
  182.     #enddef
  183. #endclass
  184.  
  185. async def readBMS(options):
  186.     startTime = time.time()
  187.  
  188.     t = threading.Thread(target = readSerial)
  189.     t.start()
  190.  
  191.     # spustit task s odesilanim dat
  192.     g.dataToSendQueue = asyncio.Queue()
  193.     asyncio.get_running_loop().create_task(processDataQueue())
  194.  
  195.     commandsToRun = []
  196.     commandsPlan = {
  197.         'stat' : Command('stat', 60*15),
  198.         'sysinfo' : Command('sysinfo', 60*60),
  199.         'bat' : Command('bat', 60*5),
  200.         'soh' : Command('soh', 60*30),
  201.         'log' : Command('log', 60*30),
  202.         'data event' : Command('data event', 60*30),
  203.         'data history' : Command('data history', 60*30),
  204.         'data misc' : Command('data misc', 60*30),
  205.     }
  206.  
  207.     lastReadDataTime = None
  208.  
  209.     while True:
  210.         try:
  211.             # cist disp data s timeoutem 0.1. Bud se precte cela radka s daty nebo dojde k timeoutu
  212.             data = await readUntilTimeout(timeout = 0.1)
  213.             if (data):
  214.                 lastReadDataTime = time.time()
  215.                 print("%s" % data, end='', flush=True)
  216.                 # kdyby nahodou prislo vice radek najednou, tak je zpracovat vsechny
  217.                 for line in data.split("\n"):
  218.                     line = line.strip()
  219.                     if (line):
  220.                         # kazdou radku zparsovat
  221.                         parsedData = dataparser.parseData_disp_pwr(line)
  222.                         if (parsedData):
  223.                             # pridat do fronty k odeslani
  224.                             g.dataToSendQueue.put_nowait({'type':'disp_pwr', 'data':parsedData})
  225.                         #endif
  226.                     #endif
  227.                 #endfor
  228.  
  229.                 for command in commandsPlan.values():
  230.                     # zkontrolovat zda-li nastal cas na spusteni prikazu
  231.                     if (time.time() - command.lastRunTime > command.interval):
  232.                         # pokud jeste neni v seznamu prikazu k behu, tak jej pridat na konec
  233.                         if (command.command not in commandsToRun):
  234.                             commandsToRun.append(command.command)
  235.                         #endif
  236.                     #endif
  237.                 #endfor
  238.            
  239.                 # pokud jsme dostali radku s daty, tak je idealni cas si poslat ostatni prikazy
  240.                 # protoze dalsi disp data prijdou az za cca 2s
  241.                 startTime = time.time()
  242.                 for command in commandsToRun[:]:
  243.                     commandsPlan[command].lastRunTime = time.time()
  244.                     commandsToRun.remove(command)
  245.  
  246.                     print("\n\n\n----")
  247.                     print("Send command: %s" % command)
  248.                     data = await sendCommand(command)
  249.                     #print(data)
  250.                    
  251.                     parseDataFunction = 'parseData_%s' % command.replace(' ', '_')
  252.                     if (hasattr(dataparser, parseDataFunction)):
  253.                         parsedData = getattr(dataparser, parseDataFunction)(data)
  254.                         if (parsedData):
  255.                             # pridat do fronty k odeslani
  256.                             g.dataToSendQueue.put_nowait({'type':command, 'data':parsedData})
  257.                         else:
  258.                             print("Unable to parse data (command: %s)\nDATA:\n%s" % (command, data))
  259.                         #endif
  260.                     else:
  261.                         print("Parse data function does not exist (name: %s)\nDATA:\n%s" % (parseDataFunction, data))
  262.                     #endif
  263.                     print("----\n\n\n")
  264.  
  265.                     # pokud provadime prikazy priliz dlouho, tak skoncit
  266.                     if (time.time() - startTime > 1.0 or True):
  267.                         break
  268.                     #endif
  269.                 #endfor
  270.             else:
  271.                 # pokud jeste nikdy neprisly data a uz je to 10s od startu tak poslat disp pwr prikaz
  272.                 # aby se spustilo posilani dat
  273.                 if (lastReadDataTime == None and time.time() - startTime > 10.0):
  274.                     print("No incoming data")
  275.                     print("Try to send 'disp pwr' command")
  276.                     data = await sendCommand("disp pwr")
  277.                     print("Response: %s" % data)
  278.                     await asyncio.sleep(3)
  279.                
  280.                 # pokud uz to nekdy data cetlo, ale je to 10 minut od posledniho prijeti dat,
  281.                 # tak se asi neco posralo, asi restart baterie, tak poslat disp pwr prikaz
  282.                 # a pockat pro zichr 5 minut
  283.                 elif (lastReadDataTime != None and time.time() - lastReadDataTime > 600.0):
  284.                     print("No incoming data")
  285.                     print("Try to send 'disp pwr' command")
  286.                     data = await sendCommand("disp pwr")
  287.                     print("Response: %s" % data)
  288.                     await asyncio.sleep(300)
  289.                 #endif
  290.             #endif
  291.         except Exception as e:
  292.             print(e)
  293.             await asyncio.sleep(1)
  294.         #endtry
  295.     #endwhile
  296. #enddef
  297.  
  298. def test():
  299.     if (0):
  300.         print(json.dumps(dataparser.parseData_bat("""
  301. Time: 2023-03-13 13:10:10
  302. A.Tempr: 23250
  303. C.Curr : 18500   mA
  304. D.Curr : -18500  mA
  305. B.State: Idle
  306. BalVolt: 3360
  307. Bat  Volt Curr    Tempr   V.State T.State AH(mAH)       WH(mWH)            Bal
  308. 0    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  309. 1    3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  310. 2    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  311. 3    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  312. 4    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  313. 5    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  314. 6    3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  315. 7    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  316. 8    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  317. 9    3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  318. 10   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  319. 11   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  320. 12   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  321. 13   3304 0       23000   Normal  Normal   67%    24815  66%        78259   N
  322. 14   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  323. 15   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  324. 16   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  325. 17   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  326. 18   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  327. 19   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  328. 20   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  329. 21   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  330. 22   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  331. 23   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  332. 24   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  333. 25   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  334. 26   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  335. 27   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  336. 28   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  337. 29   3301 0       23000   Normal  Normal   67%    24815  66%        78259   N
  338. 30   3301 0       23000   Normal  Normal   67%    24815  66%        78259   N
  339. 31   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  340. 32   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  341. 33   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  342. 34   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  343. 35   3301 0       23000   Normal  Normal   67%    24815  66%        78259   N
  344. 36   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  345. 37   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  346. 38   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  347. 39   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  348. 40   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  349. 41   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  350. 42   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  351. 43   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  352. 44   3301 0       23000   Normal  Normal   67%    24815  66%        78259   N
  353. 45   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  354. 46   3301 0       23000   Normal  Normal   67%    24815  66%        78259   N
  355. 47   3305 0       23000   Normal  Normal   67%    24815  66%        78260   N
  356. 48   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  357. 49   3304 0       23000   Normal  Normal   67%    24815  66%        78259   N
  358. 50   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  359. 51   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  360. 52   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  361. 53   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  362. 54   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  363. 55   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  364. 56   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  365. 57   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  366. 58   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  367. 59   3300 0       23000   Normal  Normal   67%    24815  66%        78259   N
  368. 60   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  369. 61   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  370. 62   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  371. 63   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  372. 64   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  373. 65   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  374. 66   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  375. 67   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  376. 68   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  377. 69   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  378. 70   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  379. 71   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  380. 72   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  381. 73   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  382. 74   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  383. 75   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  384. 76   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  385. 77   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  386. 78   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  387. 79   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  388. 80   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  389. 81   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  390. 82   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  391. 83   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  392. 84   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  393. 85   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  394. 86   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  395. 87   3303 0       23000   Normal  Normal   67%    24815  66%        78259   N
  396. 88   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  397. 89   3302 0       23000   Normal  Normal   67%    24815  66%        78259   N
  398. 90   3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  399. 91   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  400. 92   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  401. 93   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  402. 94   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  403. 95   3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  404. 96   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  405. 97   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  406. 98   3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  407. 99   3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  408. 100  3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  409. 101  3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  410. 102  3303 0       24000   Normal  Normal   67%    24815  66%        78259   N
  411. 103  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  412. 104  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  413. 105  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  414. 106  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  415. 107  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  416. 108  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  417. 109  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  418. 110  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  419. 111  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  420. 112  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  421. 113  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  422. 114  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  423. 115  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  424. 116  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  425. 117  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  426. 118  3302 0       24000   Normal  Normal   67%    24815  66%        78259   N
  427. 119  3301 0       24000   Normal  Normal   67%    24815  66%        78259   N
  428. """
  429.         ), indent=2, cls=CustomJSONEncoder))
  430.     #endif
  431.  
  432.     if (0):
  433.         print(json.dumps(dataparser.parseData_soh("""
  434. Battery    Voltage    SOHCount   SOHStatus
  435. 0          3492       0          Normal    
  436. 1          3491       0          Normal    
  437. 2          3491       0          Normal    
  438. 3          3492       0          Normal    
  439. 4          3490       0          Normal    
  440. 5          3492       0          Normal    
  441. 6          3489       0          Normal    
  442. 7          3488       0          Normal    
  443. 8          3489       0          Normal    
  444. 9          3490       0          Normal    
  445. 10         3490       0          Normal    
  446. 11         3491       0          Normal    
  447. 12         3491       0          Normal    
  448. 13         3492       0          Normal    
  449. 14         3489       0          Normal    
  450. 15         3489       0          Normal    
  451. 16         3492       0          Normal    
  452. 17         3492       0          Normal    
  453. 18         3489       0          Normal    
  454. 19         3490       0          Normal    
  455. 20         3489       0          Normal    
  456. 21         3489       0          Normal    
  457. 22         3489       0          Normal    
  458. 23         3490       0          Normal    
  459. 24         3489       0          Normal    
  460. 25         3490       0          Normal    
  461. 26         3491       0          Normal    
  462. 27         3490       0          Normal    
  463. 28         3490       0          Normal    
  464. 29         3489       0          Normal    
  465. 30         3491       0          Normal    
  466. 31         3491       0          Normal    
  467. 32         3491       0          Normal    
  468. 33         3491       0          Normal    
  469. 34         3491       0          Normal    
  470. 35         3490       0          Normal    
  471. 36         3490       0          Normal    
  472. 37         3490       0          Normal    
  473. 38         3490       0          Normal    
  474. 39         3491       0          Normal    
  475. 40         3490       0          Normal    
  476. 41         3491       0          Normal    
  477. 42         3492       0          Normal    
  478. 43         3491       0          Normal    
  479. 44         3490       0          Normal    
  480. 45         3491       0          Normal    
  481. 46         3491       0          Normal    
  482. 47         3491       0          Normal    
  483. 48         3490       0          Normal    
  484. 49         3490       0          Normal    
  485. 50         3491       0          Normal    
  486. 51         3490       0          Normal    
  487. 52         3488       0          Normal    
  488. 53         3479       0          Normal    
  489. 54         3490       0          Normal    
  490. 55         3490       0          Normal    
  491. 56         3491       0          Normal    
  492. 57         3490       0          Normal    
  493. 58         3490       0          Normal    
  494. 59         3491       0          Normal    
  495. 60         3492       0          Normal    
  496. 61         3492       0          Normal    
  497. 62         3491       0          Normal    
  498. 63         3492       0          Normal    
  499. 64         3492       0          Normal    
  500. 65         3491       0          Normal    
  501. 66         3492       0          Normal    
  502. 67         3490       0          Normal    
  503. 68         3491       0          Normal    
  504. 69         3492       0          Normal    
  505. 70         3491       0          Normal    
  506. 71         3491       0          Normal    
  507. 72         3492       0          Normal    
  508. 73         3492       0          Normal    
  509. 74         3492       0          Normal    
  510. 75         3490       0          Normal    
  511. 76         3491       0          Normal    
  512. 77         3491       0          Normal    
  513. 78         3491       0          Normal    
  514. 79         3492       0          Normal    
  515. 80         3491       0          Normal    
  516. 81         3491       0          Normal    
  517. 82         3490       0          Normal    
  518. 83         3491       0          Normal    
  519. 84         3491       0          Normal    
  520. 85         3491       0          Normal    
  521. 86         3492       0          Normal    
  522. 87         3492       0          Normal    
  523. 88         3492       0          Normal    
  524. 89         3491       0          Normal    
  525. 90         3493       0          Normal    
  526. 91         3493       0          Normal    
  527. 92         3493       0          Normal    
  528. 93         3493       0          Normal    
  529. 94         3493       0          Normal    
  530. 95         3493       0          Normal    
  531. 96         3493       0          Normal    
  532. 97         3493       0          Normal    
  533. 98         3493       0          Normal    
  534. 99         3493       0          Normal    
  535. 100        3493       0          Normal    
  536. 101        3493       0          Normal    
  537. 102        3493       0          Normal    
  538. 103        3493       0          Normal    
  539. 104        3493       0          Normal    
  540. 105        3491       0          Normal    
  541. 106        3491       0          Normal    
  542. 107        3492       0          Normal    
  543. 108        3492       0          Normal    
  544. 109        3492       0          Normal    
  545. 110        3492       0          Normal    
  546. 111        3492       0          Normal    
  547. 112        3492       0          Normal    
  548. 113        3492       0          Normal    
  549. 114        3492       0          Normal    
  550. 115        3492       0          Normal    
  551. 116        3492       0          Normal    
  552. 117        3492       0          Normal    
  553. 118        3492       0          Normal    
  554. 119        3491       0          Normal    
  555. """
  556.         ), indent=2))
  557.     #endif
  558.  
  559.     if (0):
  560.         print(json.dumps(dataparser.parseData_log("""
  561. Index   : 19    
  562. Time    : 23-03-15 07:59:02
  563. ModID   : BMM
  564. Code    : 744e
  565. Info    : The device start charging.
  566.  
  567. Index   : 18    
  568. Time    : 23-03-14 18:22:01
  569. ModID   : BMM
  570. Code    : 0
  571. Info    : The device start discharging.
  572.  
  573. Index   : 17    
  574. Time    : 23-03-14 18:01:31
  575. ModID   : BMM
  576. Code    : 0
  577. Info    : The device start discharging.
  578.  
  579. """
  580.         ), indent=2, cls=CustomJSONEncoder))
  581.     #endif
  582.  
  583.     if (0):
  584.         print(json.dumps(dataparser.parseData_data_event("""
  585. -----------------------------------------------
  586. Item Index      : 31
  587. Time            : 23-03-13 07:28:58
  588. Voltage         : 395387      mV
  589. Current         : 0           mA
  590. Temperature     : 35000       mC
  591. Percent         : 66          %
  592. Total Coulomb   : 37000       mAH
  593. Max Voltage     : 438000      mV
  594. Base State      : SysError    
  595. Volt. State     : Normal      
  596. Curr. State     : Normal      
  597. Tempr. State    : Normal      
  598. Coul. Status    : Normal      
  599. Power Events    : 0x10000000 SYSERR
  600. Unit Events     : 0x0        
  601. Bat Events      : 0x0        
  602. Bat Protect ENA : BOV BHV BLV BUV BSHUT BOT BHT BLT BUT
  603. Unit Protect ENA: UOV UHV ULV UUV USHUT UHT
  604. Pwr Protect ENA : POV PHV PLV PUV PSHUT PHT COC2 COC COCA DOCA DOC DOC2 SC LCOUL
  605. System Fault    : 0x10000 RelayAdhesion
  606. Fault SubCode   : 0x0
  607. -----------------------------------------------
  608.  
  609. Battery  Volt     Tempr    Volt. State  Temp. State  Coulomb    
  610. 0        3295     23000    Normal       Normal       66%
  611. 1        3295     23000    Normal       Normal       66%
  612. 2        3295     23000    Normal       Normal       66%
  613. 3        3296     23000    Normal       Normal       66%
  614. 4        3295     23000    Normal       Normal       66%
  615. 5        3295     23000    Normal       Normal       66%
  616. 6        3295     23000    Normal       Normal       66%
  617. 7        3295     23000    Normal       Normal       66%
  618. 8        3295     23000    Normal       Normal       66%
  619. 9        3295     23000    Normal       Normal       66%
  620. 10       3296     23000    Normal       Normal       66%
  621. 11       3295     23000    Normal       Normal       66%
  622. 12       3295     23000    Normal       Normal       66%
  623. 13       3296     23000    Normal       Normal       66%
  624. 14       3294     23000    Normal       Normal       66%
  625. 15       3296     23000    Normal       Normal       66%
  626. 16       3296     23000    Normal       Normal       66%
  627. 17       3295     23000    Normal       Normal       66%
  628. 18       3295     23000    Normal       Normal       66%
  629. 19       3295     23000    Normal       Normal       66%
  630. 20       3295     23000    Normal       Normal       66%
  631. 21       3295     23000    Normal       Normal       66%
  632. 22       3295     23000    Normal       Normal       66%
  633. 23       3295     23000    Normal       Normal       66%
  634. 24       3295     23000    Normal       Normal       66%
  635. 25       3295     23000    Normal       Normal       66%
  636. 26       3295     23000    Normal       Normal       66%
  637. 27       3295     23000    Normal       Normal       66%
  638. 28       3295     23000    Normal       Normal       66%
  639. 29       3294     23000    Normal       Normal       66%
  640. 30       3294     23000    Normal       Normal       66%
  641. 31       3295     23000    Normal       Normal       66%
  642. 32       3295     23000    Normal       Normal       66%
  643. 33       3295     23000    Normal       Normal       66%
  644. 34       3295     23000    Normal       Normal       66%
  645. 35       3294     23000    Normal       Normal       66%
  646. 36       3295     23000    Normal       Normal       66%
  647. 37       3295     23000    Normal       Normal       66%
  648. 38       3295     23000    Normal       Normal       66%
  649. 39       3295     23000    Normal       Normal       66%
  650. 40       3295     23000    Normal       Normal       66%
  651. 41       3295     23000    Normal       Normal       66%
  652. 42       3294     23000    Normal       Normal       66%
  653. 43       3295     23000    Normal       Normal       66%
  654. 44       3294     23000    Normal       Normal       66%
  655. 45       3295     23000    Normal       Normal       66%
  656. 46       3294     23000    Normal       Normal       66%
  657. 47       3296     23000    Normal       Normal       66%
  658. 48       3295     23000    Normal       Normal       66%
  659. 49       3296     23000    Normal       Normal       66%
  660. 50       3295     23000    Normal       Normal       66%
  661. 51       3295     23000    Normal       Normal       66%
  662. 52       3295     23000    Normal       Normal       66%
  663. 53       3295     23000    Normal       Normal       66%
  664. 54       3295     23000    Normal       Normal       66%
  665. 55       3294     23000    Normal       Normal       66%
  666. 56       3295     23000    Normal       Normal       66%
  667. 57       3295     23000    Normal       Normal       66%
  668. 58       3296     23000    Normal       Normal       66%
  669. 59       3293     23000    Normal       Normal       66%
  670. 60       3295     23000    Normal       Normal       66%
  671. 61       3295     23000    Normal       Normal       66%
  672. 62       3295     23000    Normal       Normal       66%
  673. 63       3294     23000    Normal       Normal       66%
  674. 64       3295     23000    Normal       Normal       66%
  675. 65       3294     23000    Normal       Normal       66%
  676. 66       3295     23000    Normal       Normal       66%
  677. 67       3295     23000    Normal       Normal       66%
  678. 68       3294     23000    Normal       Normal       66%
  679. 69       3295     23000    Normal       Normal       66%
  680. 70       3295     23000    Normal       Normal       66%
  681. 71       3295     23000    Normal       Normal       66%
  682. 72       3295     23000    Normal       Normal       66%
  683. 73       3295     23000    Normal       Normal       66%
  684. 74       3294     23000    Normal       Normal       66%
  685. 75       3295     23000    Normal       Normal       66%
  686. 76       3295     23000    Normal       Normal       66%
  687. 77       3294     23000    Normal       Normal       66%
  688. 78       3295     23000    Normal       Normal       66%
  689. 79       3295     23000    Normal       Normal       66%
  690. 80       3295     23000    Normal       Normal       66%
  691. 81       3295     23000    Normal       Normal       66%
  692. 82       3295     23000    Normal       Normal       66%
  693. 83       3295     23000    Normal       Normal       66%
  694. 84       3295     23000    Normal       Normal       66%
  695. 85       3295     23000    Normal       Normal       66%
  696. 86       3295     23000    Normal       Normal       66%
  697. 87       3295     23000    Normal       Normal       66%
  698. 88       3295     23000    Normal       Normal       66%
  699. 89       3294     23000    Normal       Normal       66%
  700. 90       3295     24000    Normal       Normal       66%
  701. 91       3295     24000    Normal       Normal       66%
  702. 92       3295     24000    Normal       Normal       66%
  703. 93       3295     24000    Normal       Normal       66%
  704. 94       3295     24000    Normal       Normal       66%
  705. 95       3295     24000    Normal       Normal       66%
  706. 96       3295     24000    Normal       Normal       66%
  707. 97       3295     24000    Normal       Normal       66%
  708. 98       3295     24000    Normal       Normal       66%
  709. 99       3295     24000    Normal       Normal       66%
  710. 100      3295     24000    Normal       Normal       66%
  711. 101      3295     24000    Normal       Normal       66%
  712. 102      3295     24000    Normal       Normal       66%
  713. 103      3295     24000    Normal       Normal       66%
  714. 104      3295     24000    Normal       Normal       66%
  715. 105      3295     24000    Normal       Normal       66%
  716. 106      3294     24000    Normal       Normal       66%
  717. 107      3295     24000    Normal       Normal       66%
  718. 108      3295     24000    Normal       Normal       66%
  719. 109      3295     24000    Normal       Normal       66%
  720. 110      3295     24000    Normal       Normal       66%
  721. 111      3294     24000    Normal       Normal       66%
  722. 112      3294     24000    Normal       Normal       66%
  723. 113      3295     24000    Normal       Normal       66%
  724. 114      3295     24000    Normal       Normal       66%
  725. 115      3295     24000    Normal       Normal       66%
  726. 116      3295     24000    Normal       Normal       66%
  727. 117      3295     24000    Normal       Normal       66%
  728. 118      3295     24000    Normal       Normal       66%
  729. 119      3293     24000    Normal       Normal       66%
  730. -----------------------------------------------
  731.  
  732. Unit     Volt     Tempr    BTLow    BTHigh   BVLow    BVHigh   Volt. State  Temp. State  Coulomb    
  733. 0        98853    23000    23000    23000    3294     3296     Normal       Normal       66%
  734. 1        98845    23000    23000    23000    3293     3296     Normal       Normal       66%
  735. 2        98844    23000    23000    23000    3294     3295     Normal       Normal       66%
  736. 3        98845    24000    24000    24000    3293     3295     Normal       Normal       66%
  737. """
  738.         ), indent=2, cls=CustomJSONEncoder))
  739.     #endif
  740.  
  741.     if (1):
  742.         print(json.dumps(dataparser.parseData_data_history("""
  743. -----------------------------------------------
  744. Rec Item Index  : 1023
  745. Time            : 23-03-15 09:15:16
  746. Voltage         : 409326      mV
  747. Current         : 11729       mA
  748. Temperature     : 35000       mC
  749. Percent         : 89          %
  750. Total Coulomb   : 37000       mAH
  751. Max Voltage     : 438000      mV
  752. Base State      : Charge      
  753. Volt. State     : Normal      
  754. Curr. State     : Normal      
  755. Tempr. State    : Normal      
  756. Coul. Status    : Normal      
  757. Power Events    : 0x0        
  758. Unit Events     : 0x0        
  759. Bat Events      : 0x0        
  760. Bat Protect ENA : BOV BHV BLV BUV BSHUT BOT BHT BLT BUT
  761. Unit Protect ENA: UOV UHV ULV UUV USHUT UHT
  762. Pwr Protect ENA : POV PHV PLV PUV PSHUT PHT COC2 COC COCA DOCA DOC DOC2 SC LCOUL
  763. System Fault    : 0x0
  764. Fault SubCode   : 0x0
  765. -----------------------------------------------
  766.  
  767. Battery  Volt     Tempr    Volt. State  Temp. State  Coulomb    
  768. 0        3413     24000    Normal       Normal       91%
  769. 1        3412     24000    Normal       Normal       90%
  770. 2        3410     24000    Normal       Normal       89%
  771. 3        3411     24000    Normal       Normal       89%
  772. 4        3412     24000    Normal       Normal       90%
  773. 5        3411     24000    Normal       Normal       89%
  774. 6        3410     24000    Normal       Normal       89%
  775. 7        3413     24000    Normal       Normal       91%
  776. 8        3413     24000    Normal       Normal       91%
  777. 9        3411     24000    Normal       Normal       89%
  778. 10       3412     24000    Normal       Normal       89%
  779. 11       3411     24000    Normal       Normal       89%
  780. 12       3412     24000    Normal       Normal       89%
  781. 13       3411     24000    Normal       Normal       89%
  782. 14       3411     24000    Normal       Normal       90%
  783. 15       3413     24000    Normal       Normal       91%
  784. 16       3411     24000    Normal       Normal       89%
  785. 17       3411     24000    Normal       Normal       89%
  786. 18       3411     24000    Normal       Normal       89%
  787. 19       3411     24000    Normal       Normal       89%
  788. 20       3412     24000    Normal       Normal       90%
  789. 21       3411     24000    Normal       Normal       89%
  790. 22       3414     24000    Normal       Normal       91%
  791. 23       3413     24000    Normal       Normal       92%
  792. 24       3413     24000    Normal       Normal       90%
  793. 25       3412     24000    Normal       Normal       89%
  794. 26       3412     24000    Normal       Normal       90%
  795. 27       3412     24000    Normal       Normal       90%
  796. 28       3411     24000    Normal       Normal       89%
  797. 29       3411     24000    Normal       Normal       89%
  798. 30       3413     24000    Normal       Normal       92%
  799. 31       3412     24000    Normal       Normal       89%
  800. 32       3411     24000    Normal       Normal       89%
  801. 33       3412     24000    Normal       Normal       89%
  802. 34       3410     24000    Normal       Normal       89%
  803. 35       3411     24000    Normal       Normal       89%
  804. 36       3411     24000    Normal       Normal       89%
  805. 37       3412     23000    Normal       Normal       90%
  806. 38       3414     23000    Normal       Normal       92%
  807. 39       3412     23000    Normal       Normal       89%
  808. 40       3411     23000    Normal       Normal       89%
  809. 41       3412     23000    Normal       Normal       90%
  810. 42       3411     23000    Normal       Normal       89%
  811. 43       3412     23000    Normal       Normal       90%
  812. 44       3413     23000    Normal       Normal       90%
  813. 45       3414     24000    Normal       Normal       91%
  814. 46       3411     24000    Normal       Normal       89%
  815. 47       3413     24000    Normal       Normal       90%
  816. 48       3413     24000    Normal       Normal       90%
  817. 49       3413     24000    Normal       Normal       90%
  818. 50       3412     24000    Normal       Normal       89%
  819. 51       3411     24000    Normal       Normal       89%
  820. 52       3413     23000    Normal       Normal       91%
  821. 53       3414     23000    Normal       Normal       92%
  822. 54       3410     23000    Normal       Normal       89%
  823. 55       3411     23000    Normal       Normal       89%
  824. 56       3412     23000    Normal       Normal       90%
  825. 57       3412     23000    Normal       Normal       89%
  826. 58       3411     23000    Normal       Normal       89%
  827. 59       3411     23000    Normal       Normal       89%
  828. 60       3413     24000    Normal       Normal       92%
  829. 61       3411     24000    Normal       Normal       89%
  830. 62       3411     24000    Normal       Normal       89%
  831. 63       3410     24000    Normal       Normal       89%
  832. 64       3411     24000    Normal       Normal       89%
  833. 65       3410     24000    Normal       Normal       89%
  834. 66       3411     24000    Normal       Normal       89%
  835. 67       3412     24000    Normal       Normal       90%
  836. 68       3413     24000    Normal       Normal       91%
  837. 69       3411     24000    Normal       Normal       89%
  838. 70       3411     24000    Normal       Normal       89%
  839. 71       3411     24000    Normal       Normal       89%
  840. 72       3411     24000    Normal       Normal       89%
  841. 73       3410     24000    Normal       Normal       89%
  842. 74       3412     24000    Normal       Normal       89%
  843. 75       3413     24000    Normal       Normal       91%
  844. 76       3410     24000    Normal       Normal       89%
  845. 77       3410     24000    Normal       Normal       89%
  846. 78       3410     24000    Normal       Normal       89%
  847. 79       3410     24000    Normal       Normal       89%
  848. 80       3410     24000    Normal       Normal       89%
  849. 81       3411     24000    Normal       Normal       89%
  850. 82       3413     24000    Normal       Normal       91%
  851. 83       3414     24000    Normal       Normal       92%
  852. 84       3411     24000    Normal       Normal       89%
  853. 85       3410     24000    Normal       Normal       89%
  854. 86       3411     24000    Normal       Normal       89%
  855. 87       3411     24000    Normal       Normal       89%
  856. 88       3411     24000    Normal       Normal       89%
  857. 89       3411     24000    Normal       Normal       89%
  858. 90       3411     25000    Normal       Normal       90%
  859. 91       3410     25000    Normal       Normal       89%
  860. 92       3409     25000    Normal       Normal       89%
  861. 93       3409     25000    Normal       Normal       89%
  862. 94       3409     25000    Normal       Normal       89%
  863. 95       3410     25000    Normal       Normal       89%
  864. 96       3409     25000    Normal       Normal       89%
  865. 97       3410     24000    Normal       Normal       89%
  866. 98       3412     24000    Normal       Normal       90%
  867. 99       3410     24000    Normal       Normal       89%
  868. 100      3410     24000    Normal       Normal       89%
  869. 101      3409     24000    Normal       Normal       89%
  870. 102      3410     24000    Normal       Normal       89%
  871. 103      3409     24000    Normal       Normal       89%
  872. 104      3410     24000    Normal       Normal       89%
  873. 105      3410     25000    Normal       Normal       89%
  874. 106      3408     25000    Normal       Normal       89%
  875. 107      3408     25000    Normal       Normal       89%
  876. 108      3409     25000    Normal       Normal       89%
  877. 109      3408     25000    Normal       Normal       89%
  878. 110      3409     25000    Normal       Normal       89%
  879. 111      3409     25000    Normal       Normal       89%
  880. 112      3410     24000    Normal       Normal       89%
  881. 113      3411     24000    Normal       Normal       90%
  882. 114      3408     24000    Normal       Normal       89%
  883. 115      3409     24000    Normal       Normal       89%
  884. 116      3409     24000    Normal       Normal       89%
  885. 117      3409     24000    Normal       Normal       89%
  886. 118      3410     24000    Normal       Normal       89%
  887. 119      3409     24000    Normal       Normal       89%
  888. -----------------------------------------------
  889.  
  890. Unit     Volt     Tempr    BTLow    BTHigh   BVLow    BVHigh   Volt. State  Temp. State  Coulomb    
  891. 0        102351   24000    24000    24000    3410     3414     Normal       Normal       89%
  892. 1        102358   23000    23000    24000    3410     3414     Normal       Normal       89%
  893. 2        102334   24000    24000    24000    3410     3414     Normal       Normal       89%
  894. 3        102283   24000    24000    25000    3408     3412     Normal       Normal       89%
  895. """
  896.         ), indent=2, cls=CustomJSONEncoder))
  897.     #endif
  898.  
  899. #enddef
  900.  
  901. if (not options.test):
  902.     asyncio.run(readBMS(options))
  903. else:
  904.     test()
  905. #enddef
  906.  
Advertisement
Add Comment
Please, Sign In to add comment