Last active
August 29, 2015 13:55
-
-
Save cast42/8786175 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"""vpower.py. Add power to TCX file for Garmin Tacx Blue Motion indoor trainer | |
Usage: | |
vpower.py [--lever=<lv>] INPUT | |
Arguments: | |
INPUT Required .TCX input filename | |
Options: | |
-h --help Show this. | |
--lever=<lv> Specify position of the handlebar resistance lever [default: 5]. | |
""" | |
from __future__ import print_function | |
import re, sys | |
from docopt import docopt | |
# To install docopt: pip install docopt | |
# To install pip : get get-pip.py from http://www.pip-installer.org/en/latest/installing.html#install-or-upgrade-pip | |
# python get-ip.py | |
def s2p(speed, lever=5): | |
assert (lever > 0 and lever < 11) | |
# The array factor contains power at 60km/h at lever positions 1 to 10 | |
# Derived from http://www.tacx.com/en/products/trainers/blue-motion#tab_2 | |
factor = [200.0,281.0,366.0,447.0,532.0,616.0,702.0,787.0,868.0,953.0] | |
return int(speed/60.0*factor[lever-1]) | |
def process(inputfilename, lever): | |
with open(inputfilename, 'rt') as fi: | |
for line in fi: | |
print (line, end='') | |
match = re.match('\s+<Speed>(\d+.\d+)',line) | |
if match: | |
speed = float(match.group(1)) | |
speed_in_kmperh = speed/1000.0*60.0*60.0 | |
power_in_watt = s2p(speed_in_kmperh, lever) | |
print (' <Watts>%d</Watts>' % power_in_watt) | |
if __name__ == '__main__': | |
arguments = docopt(__doc__) | |
inputfilename = arguments["INPUT"] | |
if not inputfilename.endswith('.tcx'): | |
print ("input file %s has no .tcx extention" % inputfilename) | |
exit(-1) | |
if arguments['--lever']: | |
lever = int(arguments['--lever']) | |
assert (lever > 0 and lever <11) | |
sys.stderr.write('Handlebar resistance lever position = %d \n' % lever) | |
sys.stderr.flush() | |
else: | |
lever = 5 | |
sys.stderr.write('Assuming default handlebar resistance lever postion at 5\n') | |
sys.stderr.flush() | |
process(inputfilename, lever) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment