Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- ===========================================================
- SkyRC iMAX B6 Mini - CSV data logger
- It works on Windows and requires pywinusb
- Also, you need to modify 2 lines in core.py (pywinusb)
- to allow vendor_id = 0x0000 there
- For pywinusb 0.4.1 patch is:
- 154c154
- < if hid_device.vendor_id:
- ---
- > if hid_device.vendor_id or hid_device.product_id:
- 391c391
- < if not (self.vendor_id):
- ---
- > if not (self.vendor_id or self.product_id):
- __author__ = "Mikhail Kotov"
- __copyright__ = "25 January 2017"
- __version__ = "0.9"
- __maintainer__ = "Mikhail Kotov"
- __email__ = "efoxxi@gmail.com"
- __status__ = "Testing"
- ============================================================
- """
- import pywinusb.hid as hid
- import datetime
- import time
- import sys
- def print_handler(data):
- data.pop(0) # for pywinusb only, it whants 65 bytes, not 64
- if data[4] == 1: # - STATE: prints info only if doing something
- output_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') + ", " # Date
- output_str += (str(data[7] * 256 + data[8]) + ", ").ljust(9) # Seconds
- output_str += (str(data[5] * 256 + data[6]) + ", ").ljust(7) # mAh
- output_str += (str((data[9] * 256 + data[10]) / 1000.0) + ", ").ljust(9) # Voltage
- output_str += (str((data[11] * 256 + data[12]) / 1000.0) + ", ").ljust(9) # Current
- output_str += (str(data[13]) + ", ").ljust(5) # External Temp
- output_str += (str(data[14]) + ", ").ljust(8) # Internal Temp
- output_str += str((data[17] * 256 + data[18]) / 1000.0) + ", " # Cell 1
- output_str += str((data[19] * 256 + data[20]) / 1000.0) + ", " # Cell 2
- output_str += str((data[21] * 256 + data[22]) / 1000.0) + ", " # Cell 3
- output_str += str((data[23] * 256 + data[24]) / 1000.0) + ", " # Cell 4
- output_str += str((data[25] * 256 + data[26]) / 1000.0) + ", " # Cell 5
- output_str += str((data[27] * 256 + data[28]) / 1000.0) # Cell 6
- print output_str
- if csv_file_name:
- with open(csv_file_name, 'a') as csv_file:
- csv_file.write(output_str + '\n')
- if __name__ == '__main__':
- csv_file_name = None
- if len(sys.argv) > 1:
- csv_file_name = sys.argv[1]
- vendor_id = 0x0000
- product_id = 0x0001
- try:
- b6mini = hid.HidDeviceFilter(vendor_id=vendor_id, product_id=product_id).get_devices()[0]
- # print b6mini
- except:
- print 'Please connect SkyRC iMAX B6 Mini to computer'
- sys.exit(1)
- b6mini.set_raw_data_handler(print_handler)
- buffer = [0x00] # for pywinusb only, it whants 65 bytes, not 64
- buffer.extend([0x0F, 0x03, 0x55, 0x00, 0x55, 0xFF, 0xFF] + ([0] * 57)) # 64 bytes
- #print len(buffer), buffer
- header_str = "date, timer, energy, voltage, current, ext temp, int temp, cell 1, cell 2, cell 3, cell 4, cell 5, cell 6"
- print(header_str)
- if csv_file_name:
- with open(csv_file_name, 'a') as csv_file:
- csv_file.write(header_str + '\n')
- b6mini.open()
- while True:
- try:
- b6mini.send_output_report(buffer)
- except:
- print 'Please connect SkyRC iMAX B6 Mini to computer'
- sys.exit(1)
- time.sleep(1)
- b6mini.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement