Advertisement
efoxxi

b6mini_windows_logger.py

Jan 24th, 2017
851
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.48 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. ===========================================================
  4.             SkyRC iMAX B6 Mini  - CSV data logger
  5.  
  6. It works on Windows and requires pywinusb
  7.  
  8. Also, you need to modify 2 lines in core.py (pywinusb)
  9. to allow vendor_id = 0x0000 there
  10. For pywinusb 0.4.1 patch is:
  11.  
  12. 154c154
  13. <             if hid_device.vendor_id:
  14. ---
  15. >             if hid_device.vendor_id or hid_device.product_id:
  16. 391c391
  17. <         if not (self.vendor_id):
  18. ---
  19. >         if not (self.vendor_id or self.product_id):
  20.  
  21.  
  22. __author__ = "Mikhail Kotov"
  23. __copyright__ = "25 January 2017"
  24. __version__ = "0.9"
  25. __maintainer__ = "Mikhail Kotov"
  26. __email__ = "efoxxi@gmail.com"
  27. __status__ = "Testing"
  28. ============================================================
  29. """
  30. import pywinusb.hid as hid
  31. import datetime
  32. import time
  33. import sys
  34.  
  35. def print_handler(data):
  36.     data.pop(0)       # for pywinusb only, it whants 65 bytes, not 64
  37.     if data[4] == 1:  # - STATE: prints info only if doing something
  38.         output_str =  datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + ",   " # Date
  39.         output_str += (str(data[7]   * 256 + data[8]) + ", ").ljust(9)               # Seconds
  40.         output_str += (str(data[5]   * 256 + data[6]) + ", ").ljust(7)               # mAh
  41.         output_str += (str((data[9]  * 256 + data[10]) / 1000.0) + ", ").ljust(9)    # Voltage
  42.         output_str += (str((data[11] * 256 + data[12]) / 1000.0) + ", ").ljust(9)    # Current
  43.         output_str += (str(data[13]) + ", ").ljust(5)                                # External Temp
  44.         output_str += (str(data[14]) + ", ").ljust(8)                                # Internal Temp
  45.         output_str += str((data[17] * 256 + data[18]) / 1000.0) + ", "  # Cell 1
  46.         output_str += str((data[19] * 256 + data[20]) / 1000.0) + ", "  # Cell 2
  47.         output_str += str((data[21] * 256 + data[22]) / 1000.0) + ", "  # Cell 3
  48.         output_str += str((data[23] * 256 + data[24]) / 1000.0) + ", "  # Cell 4
  49.         output_str += str((data[25] * 256 + data[26]) / 1000.0) + ", "  # Cell 5
  50.         output_str += str((data[27] * 256 + data[28]) / 1000.0)         # Cell 6
  51.         print output_str
  52.        
  53.         if csv_file_name:
  54.             with open(csv_file_name, 'a') as csv_file:
  55.                 csv_file.write(output_str + '\n')
  56.  
  57. if __name__ == '__main__':
  58.     csv_file_name = None
  59.     if len(sys.argv) > 1:
  60.         csv_file_name = sys.argv[1]
  61.    
  62.     vendor_id  = 0x0000
  63.     product_id = 0x0001
  64.  
  65.     try:
  66.         b6mini = hid.HidDeviceFilter(vendor_id=vendor_id, product_id=product_id).get_devices()[0]
  67.         # print b6mini
  68.     except:
  69.         print 'Please connect SkyRC iMAX B6 Mini to computer'
  70.         sys.exit(1)
  71.    
  72.     b6mini.set_raw_data_handler(print_handler)
  73.    
  74.     buffer = [0x00]  # for pywinusb only, it whants 65 bytes, not 64
  75.     buffer.extend([0x0F, 0x03, 0x55, 0x00, 0x55, 0xFF, 0xFF] + ([0] * 57))  # 64 bytes
  76.     #print len(buffer), buffer
  77.    
  78.     header_str = "date,                 timer, energy, voltage, current, ext temp, int temp, cell 1, cell 2, cell 3, cell 4, cell 5, cell 6"
  79.     print(header_str)
  80.     if csv_file_name:
  81.         with open(csv_file_name, 'a') as csv_file:
  82.             csv_file.write(header_str + '\n')
  83.  
  84.     b6mini.open()
  85.     while True:
  86.         try:
  87.             b6mini.send_output_report(buffer)
  88.         except:
  89.             print 'Please connect SkyRC iMAX B6 Mini to computer'
  90.             sys.exit(1)
  91.         time.sleep(1)
  92.     b6mini.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement