RowMetrics
RowMetrics is a program for logging workout data from a Concept2 rowing machine's Performance Monitor. It collects time, distance, speed, stroke rate, power, and heart rate information during the workout and writes the results to a comma-separated values (CSV) file and also generates a scalable vector graphic (SVG) plot of the data. It also calculates weight-adjusted values for the appropriate parameters.
Contents
Requirements
- A computer running Linux
- A Concept2 rowing machine with a Performance Monitor (version 3 or 4).
- PyUSB
- matplotlib
Download
Download the tarball: rowmetrics-0.1.0.tar.gz (21 KB)
Installation
- Identifying your Concept2 Performance Monitor (PM)
- With your PM disconnected from your computer, type lsusb at the command line and note the output.
- Now plug your PM into a USB port and type lsusb
again. Identify the line that changed. In my case, it looks
like this:
Bus 001 Device 006: ID 17a4:0001 Concept2 Performance Monitor 3 - Record your VendorID (17a4 in this example), and ProductID (0001 in this example) for future use.
- Modifying udev rules to allow non-root USB access to the PM
- As root, save the following, all on one line, to
/etc/udev/rules.d/99-concept2.rules, replacing
VVVV and PPPP with the VendorID and ProductID respectively:
ATTRS{idVendor}=="VVVV", ATTRS{idProduct}=="PPPP", MODE="0666" - As root, reload the udev rules with:
udevadm control --reload-rules - Disconnect and reconnect the Concept2 PM from your computer.
- As root, save the following, all on one line, to
/etc/udev/rules.d/99-concept2.rules, replacing
VVVV and PPPP with the VendorID and ProductID respectively:
- Extract RowMetrics and make it executable
- Extract RowMetrics to a convenient location:
tar xzf rowmetrics-0.1.0.tar.gz -C ~/bin/ - Make RowMetrics executable:
chmod +x ~/bin/RowMetrics/row_metrics.py
- Extract RowMetrics to a convenient location:
Usage
To begin a logged workout, you'll need to run RowMetrics with the appropriate command line parameters:
- -i (required): the VendorID and ProductID of your PM in the form VVVV:PPPP
- -p (required): the workout program number you
plan to row. These are enumerated according to the lists on your
PM:
- Standard List #1
- Standard List #2
- Standard List #3
- Standard List #4
- Standard List #5
- Custom List #1
- Custom List #2
- Custom List #3
- Custom List #4
- Custom List #5
- Favorites List #1 (LogCard required)
- Favorites List #2 (LogCard required)
- Favorites List #3 (LogCard required)
- Favorites List #4 (LogCard required)
- Favorites List #5 (LogCard required)
- -w (required): your weight in pounds
- -f (optional): data sampling frequency in Hz (default: 1 Hz)
Example: A 165-lb person who wants to row a 10k
while logging data every five seconds might run:
~/bin/RowMetrics/row_metrics.py -i 17a4:0001 -p 3 -w 165 -f 0.2
Limitations
RowMetrics is not perfect. Here are some of its limitations. There are probably others.
- It only logs the first interval for interval workouts.
- It is restricted to the workouts in the PM menu.
- It uses the PM's low-resolution timer which means that the maximum effective sampling frequency is 1 Hz.
- It does everything its busy developer currently desires, so your feature requests will likely be ignored. Fortunately, it's open-source.
Sample Output
For sample output (or for a good laugh), check out the results of my own logged workouts. Sometimes I don't wear the heart rate monitor, so do not be alarmed if my heart rate appears to be zero.
| Timestamp | Results | |
|---|---|---|
| 20090404T234358Z | CSV | SVG |
| 20090412T190834Z | CSV | SVG |
| 20090415T021811Z | CSV | SVG |
| 20090417T021440Z | CSV | SVG |
| 20090429T024054Z | CSV | SVG |
| 20090510T011105Z | CSV | SVG |