rsc-dev / loophole Goto Github PK
View Code? Open in Web Editor NEWPolar devices Python API and CLI.
License: MIT License
Polar devices Python API and CLI.
License: MIT License
...and how can it looks like?!?
Maybe display a example udev rule, if the current user can't access, as here #8
Maybe something like this:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0da4", ATTRS{idProduct}=="0008", OWNER="<username>"
Fill ids and username automaticlly.
(I don't test this rule and don't know if it`s a good idea and a common rule...)
I am really interested in accessing detailed sleep and heart rate data. What types of data can be downloaded with this library? Is there any sample data available for a demo?
We want to use a polar A360 in our hospital. And as you can imaging we are not happy (and allowed to) to send de data of our patients into the Polar cloud. So I was very happy to find your software.
I installed the software onto a windows system en was able to connect en read/dump the files from the connected device. I nerver used python before so as far I can understand you use the protocol buffers to decode the files when they are read from the device but how can I convert the files into a readable format ( e.g text ) so we can use then in excel ?
Regards
Bart Nienhuis
Hi! How should i process the data from Route.gzb to make sense? Using protoc raw to decode but the GPS cordinates doesnt make sense for me! Thanks!
Hi!
I'm trying to use your software with Polar v650. The list
command does see the device, but when I try to connect it I get an error
loophole(no device)>list
0 - Polar V650 (BUEY4HDMAIMVW8OJ)loophole(no device)>connect 0
Traceback (most recent call last):
File "~/anaconda2/lib/python2.7/site-packages/loophole/main.py", line 300, in
main()
File "~/anaconda2/lib/python2.7/site-packages/loophole/main.py", line 293, in main
cli.cmdloop(__INTRO.format(version))
File "~/anaconda2/lib/python2.7/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "~/anaconda2/lib/python2.7/cmd.py", line 221, in onecmd
return func(arg)
File "~/anaconda2/lib/python2.7/site-packages/loophole/main.py", line 116, in do_connect
self.device.open()
File "~/anaconda2/lib/python2.7/site-packages/loophole/polar/init.py", line 667, in open
self.usb.open(self.usb_device)
File "~/anaconda2/lib/python2.7/site-packages/loophole/polar/init.py", line 587, in open
self.usb.open(usb_device)
File "~/anaconda2/lib/python2.7/site-packages/loophole/polar/init.py", line 502, in open
assert self.ep_out_0 is not None
AssertionError
Is it possible to solve?
Thanks!
Dear @rsc-dev,
I get the following error message when I try to connect loophole to my Polar Vantage V:
.../__init__.py", line 502, in open
assert self.ep_out_0 is not None
I realize the Vantage series was not out when you wrote the code, but would you be so kind as to look into this matter, or perhaps give me some pointers so that I can try myself?
Many thanks in advance.
Hi Roscoe, I'm wondering if you're still doing any work on this. I bought a polar ignite model, and unfortunately loophole doesn't seem to want to connect. If you have any thoughts on what I might try, I'd appreciate it very, very much.
The "dump" will save many files, but it will not end and "hang"...
Strg-C will raise this:
File "src/loophole/loophole/__main__.py", line 185, in do_dump
data = self.device.read_file('{}{}'.format(directory, file.name))
File "/home/jens/workspace/polar_venv/src/loophole/loophole/polar/__init__.py", line 728, in read_file
resp = self.usb.send(request=req)
File "/home/jens/workspace/polar_venv/src/loophole/loophole/polar/__init__.py", line 606, in send
resp = self.usb.send(request, timeout)
File "/home/jens/workspace/polar_venv/src/loophole/loophole/polar/__init__.py", line 542, in send
data = self.__send_wait(ack, timeout)
File "/home/jens/workspace/polar_venv/src/loophole/loophole/polar/__init__.py", line 436, in __send_wait
response = self.ep_in_0.read(64, timeout)
File "/home/jens/workspace/polar_venv/src/pyusb/usb/core.py", line 402, in read
return self.device.read(self, size_or_buffer, timeout)
File "/home/jens/workspace/polar_venv/src/pyusb/usb/core.py", line 988, in read
self.__get_timeout(timeout))
File "/home/jens/workspace/polar_venv/src/pyusb/usb/backend/libusb1.py", line 851, in intr_read
timeout)
File "/home/jens/workspace/polar_venv/src/pyusb/usb/backend/libusb1.py", line 933, in __read
timeout)
KeyboardInterrupt
Maybe the default timeout=2000
is a little bit to long?!?
EDIT: I not see that the last file is: /SYS/FONT/JA.SIF (3135521 bytes)
maybe it needs more time, because it`s a big file?!?
Is it possible to display some status information?!?
Really?!?
I have m400 connected to usb and when trying to list devices using loophole I get this:
loophole(no device)>list
Traceback (most recent call last):
File "__main__.py", line 241, in <module>
main()
File "__main__.py", line 234, in main
cli.cmdloop(__INTRO.format(__version__))
File "/usr/lib/python2.7/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "/usr/lib/python2.7/cmd.py", line 221, in onecmd
return func(arg)
File "__main__.py", line 74, in do_list
info = Device.get_info(dev)
File "/home/lklich/Projects/loophole/loophole/polar/__init__.py", line 549, in get_info
return usb.get_info(usb_device)
File "/home/lklich/Projects/loophole/loophole/polar/__init__.py", line 472, in get_info
return self.usb.get_info(usb_device)
File "/home/lklich/Projects/loophole/loophole/polar/__init__.py", line 370, in get_info
info['manufacturer'] = self.usb.util.get_string(usb_device, usb_device.iManufacturer)
File "/usr/local/lib/python2.7/dist-packages/usb/util.py", line 314, in get_string
raise ValueError("The device has no langid")
ValueError: The device has no langid
My lsusb (if needed):
โ loophole git:(master) lsusb git:(master|)
Bus 001 Device 004: ID 0a5c:5800 Broadcom Corp. BCM5880 Secure Applications Processor
Bus 001 Device 003: ID 8087:07dc Intel Corp.
Bus 001 Device 002: ID 8087:8000 Intel Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 002: ID 1bcf:2985 Sunplus Innovation Technology Inc. Laptop Integrated Webcam HD
Bus 002 Device 003: ID 0da4:0008 Polar Electro Oy Loop
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
I'm using ubuntu 16.04 with kernel 4.4
I am trying to diagnose a Windows permission problem using pyusb.
It shows up with the typical errors "The device has no langid (permission issue, no string descriptors supported or device error)" and "The device has no langid (permission issue, no string descriptors supported or device error)"
Test code is simple, just find and print the dev to see if strings have been fetched and try to do a set configuration.
This works correctly on Linux and several of my Windows test systems (both Windows 10 and 11.)
But it is failing consistently on one Windows 10 system.
The device in question is a Garmin Ant+ (aka Dynastream) dongle. It can be accessed by other software correctly on that system. I have tried several different ones, as well as a Cycplus Ant+ dongle. None can be accessed.
I have also tried running the test program from a command prompt started as system administrator. No differences.
I am testing this with a pyinstaller created exe that bundles in the libusb-1.0.dll, and verified that works correctly on my other Windows systems.
Also tried libusb0.dll. Again works correctly elsewhere, but fails on the one Windows 10 system in an identical fashion
Suggestions would be welcome!
Thanks!
`is_ant_device: dev: 0x1009
testpyusb: dev: DEVICE ID 0fcf:1009 on Bus 003 Address 017 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
bMaxPacketSize0 : 0x20 (32 bytes)
idVendor : 0x0fcf
idProduct : 0x1009
bcdDevice : 0x100 Device 1.0
iManufacturer : 0x1 Error Accessing String
iProduct : 0x2 Error Accessing String
iSerialNumber : 0x3 Error Accessing String
bNumConfigurations : 0x1
testpyusb: fetching string descriptors
testpyusb: dev.manufacturer e: The device has no langid (permission issue, no string descriptors supported or device error)
testpyusb: dev.product e: The device has no langid (permission issue, no string descriptors supported or device error)
testpyusb: dev.idVendor 0x0fcf
testpyusb: dev.idProduct 0x1009
testpyusb: set_configuration
testpyusb: set configuration failed e: [Errno 13] Access denied (insufficient permissions)
'
I have a Polar A360, Firmware v1.2.60, HW-Model 00756861.01
Traceback (most recent call last):
File "__main__.py", line 285, in <module>
main()
File "__main__.py", line 278, in main
cli.cmdloop(__INTRO.format(__version__))
File "/usr/lib/python2.7/cmd.py", line 142, in cmdloop
stop = self.onecmd(line)
File "/usr/lib/python2.7/cmd.py", line 221, in onecmd
return func(arg)
File "__main__.py", line 75, in do_list
info = Device.get_info(dev)
File "/media/servershare/repos/polar_venv/src/loophole/loophole/polar/__init__.py", line 660, in get_info
return usb.get_info(usb_device)
File "/media/servershare/repos/polar_venv/src/loophole/loophole/polar/__init__.py", line 578, in get_info
return self.usb.get_info(usb_device)
File "/media/servershare/repos/polar_venv/src/loophole/loophole/polar/__init__.py", line 476, in get_info
info['manufacturer'] = self.usb.util.get_string(usb_device, usb_device.iManufacturer)
File "/media/servershare/repos/polar_venv/src/pyusb/usb/util.py", line 314, in get_string
raise ValueError("The device has no langid")
ValueError: The device has no langid
$ lsusb
...
Bus 001 Device 004: ID 0da4:0008 Polar Electro Oy Loop
...
the print output of Device.list() entry is:
0 DEVICE ID 0da4:0008 on Bus 001 Address 004 =================
bLength : 0x12 (18 bytes)
bDescriptorType : 0x1 Device
bcdUSB : 0x200 USB 2.0
bDeviceClass : 0x0 Specified at interface
bDeviceSubClass : 0x0
bDeviceProtocol : 0x0
bMaxPacketSize0 : 0x40 (64 bytes)
idVendor : 0x0da4
idProduct : 0x0008
bcdDevice : 0x100 Device 1.0
iManufacturer : 0x1 Error Accessing String
iProduct : 0x2 Error Accessing String
iSerialNumber : 0x3 Error Accessing String
bNumConfigurations : 0x1
CONFIGURATION 1: 350 mA ==================================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x2 Configuration
wTotalLength : 0x29 (41 bytes)
bNumInterfaces : 0x1
bConfigurationValue : 0x1
iConfiguration : 0x4 Error Accessing String
bmAttributes : 0x80 Bus Powered
bMaxPower : 0xaf (350 mA)
INTERFACE 0: Human Interface Device ====================
bLength : 0x9 (9 bytes)
bDescriptorType : 0x4 Interface
bInterfaceNumber : 0x0
bAlternateSetting : 0x0
bNumEndpoints : 0x2
bInterfaceClass : 0x3 Human Interface Device
bInterfaceSubClass : 0x0
bInterfaceProtocol : 0x0
iInterface : 0x5 Error Accessing String
ENDPOINT 0x81: Interrupt IN ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x81 IN
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x1
ENDPOINT 0x1: Interrupt OUT ==========================
bLength : 0x7 (7 bytes)
bDescriptorType : 0x5 Endpoint
bEndpointAddress : 0x1 OUT
bmAttributes : 0x3 Interrupt
wMaxPacketSize : 0x40 (64 bytes)
bInterval : 0x1
virtualenv info:
$ pip freeze
appdirs==1.4.3
packaging==16.8
pkg-resources==0.0.0
protobuf==3.2.0
pyparsing==2.2.0
-e git+https://github.com/walac/pyusb.git@1f66ccd5d252e969b1de9bf91bf24e5c64294b8d#egg=pyusb
six==1.10.0
What files do I have to delete from the device to get it working again?
I deleted every file with date on it but it still says "please sync".
I would like to use only this software to get it working because I only have linux and I don't want it to connect to Internet. My computer should be enough.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.