You've been playing with wattage based solutions for cycling and you've invented new swear words when you've tried to migrate your data from one solution to another?
Your Coach is only able to read files in format X, you have Y?
You've got a SRM recording and a GPS track and want to merge them into one Dataset?
You're a unix script guy and want to automate tasks related to your cycling workout data?
Well, that's the problems I've had and couldn't find a solution for. So I wrote mine. The result is a perl lib with file import/export modules, a set of filters for conversion, some command-line tools and some GTK based visualizing tools.
Adding support for more file formats should be quite easy by writing a custom Workout::Store class - especially for text/csv/xml files like ergomo or iBike.
File formats
- SRM file versions SRM5-SRM7 (i.e. incl. srmwin supporting PC VI )
- Polar HRM
- GPX tracks
- Garmin Training Center Database TCX
- Germin FIT (read only and preliminary write in devlopment tree)
- Powertap csv
- WKT - a custom csv-based format
Filter
- Resample - refit data into new recording intervals
- Power - guesstimate Power from speed + elevation data
- Timeshift - to correct time offsets
- Join - fill gaps with empty data
- Merge - merge data from different recordings into a single dataset
- Concat - concatenate data from several input stores
- FTP - calculate NP, VI, IF and TSS
- Max - calculate Max Power for a specified duration (say your best 20min)
- Zone - summarize time spent in a specified zone
Tools
In addition to the library modules there are some prebuilt tools for common use:
- wkinfo - show some summary information for a workout
- wkdump - dump workout data to stdout
- wkplot - Show Chart
- wkhisto - calculate time spent in specified zones
- wkdist - plot distribution chart of workout
- wkconv - convert from one to another format
- wkmodify - allow setting some workout attributs
- wkdelta - allow user to fix mismatching time of concurrent recordings
- wkblocks - modify workout block timestamps
- wkmerge - merge data of two concurrent recordings
- wkjoin - concatenate data from several files
- wksplit - split workouts at specified time
- wksum - calculate summary information from several files
- wkpmc - show PMC graph with CTL, ATL and TSB for specified files
For now the tools lack any documentation beyond the short usage info they provide when invoked with --help - but at least that's something all of them offer.
Changes:
0.15 2010-09-13
- Store::SRM: open files without crlf conversion
- Store::HRM: fix writing smode
- cope with new DateTime-0.52 restrictions
- Store::Tcx: fix writing laps without heartrate
- wkmerge: fixed --delta to work as documented
- Store::Tcx: skip empty laps
- Store: suppress bogus marker
- Store::SRM: fixed temperature formatting
- added wkblocks
- wkjoin: warn about inconsistent start times
- added wksplit
- Store::Gpx: fix fields_io
- Store:Wkt: fix reading subsecond marker
- Filter::Concat: fixed to read last file, too
- Store::SRM: reintroduced support for perl < 5.9.1
- Store::SRM: fix reading with blocks without chunks
- wk*: fix getopt type for float options
- gitignore: added backup files
- Store::SRM: made big-endian safe
- Filter::Info: fix moving time to include cad
- Filter::Info: fix hr_avg in absence of pwr and cad
- Store::Powertap: Properly detect unset values
0.14 2009-12-25
- clarified optional dependencies
- Store::Gpx: don't write bogus elevation
- HRM/SRM: identify missing heartrate
- Store::Wkt: strip line endings
- Store::Wkt: handle undefined fields properly
- added filter SkipUndef
- Store::HRM: fixed lap temperature
- added support for TCX files
- GPX,TCX: wrapped regex for more readability
- pass filename to Store::do_read/_write
- added Store::Powertap
- Store::Tcx: fixed to use note in correct block
- Store::HRM: fixed subsecond Timestamps
- Filter::Join: reduce debug logging
- Store::SRM: removed debug logging of read markers
- Store: return lists in array context
- Store: added debug logging for markers read
- Store: Added support to convert Marker <-> Laps.
- Store::HRM: use new Lap conversion
- Store::HRM: added support for reading laps
- fix Store: don't close passed file handles
- Store: try to guess marker from lap notes
- Wkt,HRM: properly escape line breaks in notes
- added Filter::Concat
- added wkjoin
- moved queueing from Filter::Base to Filter::BaseQueue
- Store::HRM: copy athlete info when available
- fix wkmerge: pick athlete from second workout, too
- Iterator: added capabilites
- Store::Wkt: sort written columns for consistency
- Store::SRM: fixed writing marker offset
- Store::Gpx: simplified lon,lat reading
- HRM,SRM: use carp instead of warn.
- added support for probing file types to fabric
- wk*: cleaned command line options
0.13 2009-12-08
- removed superflous Null Store
- merged Store::Memory into Store
- made some wkinfo output optional for speed
- Store->chunk_add() no longer clones the chunk!!!!
- removed now unneeded Store->_chunk_add
- converted Store::Gpx to XML::SAX
- fixed encoding for (new)Gpx, HRM and Wkt Stores
- reworked Iterator store handling. Allows multiple stores per chain.
- added support for tracking supported/used/wanted fields
- massive documentation updates
0.12 2009-12-03
- Marker: fixed memory leak
- SRM: fix to use more up to date cp850
0.11 2009-12-03
- HRM: read athlete data
- wkconv/wkmerge/wkinfo: pick athlete info from source when available
- SRM: properly de-/encode comments
0.10 2009-08-01 (non-public)
- SRM: fix to use consistent timestamps on read/write
- wkdelta: make --field work
- some bugfixes for subsecond timestamps/recints
- fix reading HRM timestamps
- wkmerge: check fields to merge
0.09 2009-07-23
- added wkdist, wkhisto
- feed pre-build chart to MyChart::Gtk (obsoleting Workout::Gtk::Chart::*)
- added torque info to Chunks and wkinfo output
- added Workout::Filter::Zone - caculcate time in specified zones
- added support for new SRM7 files introduced for PCVI
- fixed bug in SRM6 writing where the power data was truncated to 2048W
0.08 2009-04-24
- added Filter::FTP for calculating NP, VI, IF, and TSS
- set window titles in GTK apps
- added wkpmc for calculating and plotting CTL, ATL and TSB
- added Filter::Max
- wkinfo: include 20min max power
0.07 2009-02-21
- Store::HRM, Store::Wkt: use cached regexp for speedup
- wkplot/wkdelta: use MyChart instead of gnuplot
- Store::* added support for marker/lap data
- wkdelta now allows to update the file
- rewrote Store::SRM to use Store::Memory
- added wkmodify for setting workout attributes
- fixed SRM notes reading/writing
- tons of bugfixes