Skip to content

Instantly share code, notes, and snippets.

@cast42
Last active August 29, 2015 13:55
Show Gist options
  • Save cast42/8786175 to your computer and use it in GitHub Desktop.
Save cast42/8786175 to your computer and use it in GitHub Desktop.
"""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