HRM File Format
Overview
The Polar S7xx heart rate monitor comes with Windows software to download and display workout data. That’s nice, but for those of us that don’t use Windows, it’s really not going to work.
Dave Bailey, a physicist turned to the dark side of programming like me, has written software to download and display workout data on Linux. Unfortunately, the format he uses to store data is not the same as the format used by the Windows software.
In a different section, I describe my attempts at creating software to add support for the Windows format to the Linux utilities, so as to make transition between the two operating systems easier.
Here, you’ll find all I found out about the Windows file format, called HRM after the extension .hrm
General: Format and Conventions
First the good news: the HRM file format is plain text, and you can look at your workouts in any text editor. The format actually follows the conventions of .INI files, with sections delimited by square brackets (‘[]’), like in the following example:
<span size="-2">[Params] Version=106 Monitor=12 [ExtraData] [Summary-123] 0 0 0 0 0 0 180 160 80 70 </span>
The bad news next: HRM does not capture all the data recorded in a workout session. It records almost all of it, though.
More news: HRM is a variable format, meaning that it looks slightly different depending on what you were recording on a given workout. To give you an example of what I mean, if you turn off altitude data, you’ll have one less column in the data section. Since you can turn on and off a lot of features, this means that parsing is a bit of a problem.
Sections are always stored in a fixed sequence, starting with Params and ending with HRData.
Sections
Since there is no official documentation, all of the following are guesses. Since some of them are wilder than others, I decided to put those items in italic that seemed more off the mark than others.
[Params]
This section is always at the top of the file and contains the general parameters for the workout.
- Version
- Currently set to 106, this is the version number of the software.
- Monitor
- *I get 12 here, and assume this is the marker for the heart rate monitor (S710 in my case)*.
- SMode
- This is the recording mode. It is a list of bits that mark different functions used in the recording. See table below for the meaning of the bits.
- Date
- The start date of the workout in 4 digit year, 2 digit month, 2 digit day format.
- StartTime
- The start time of the workout. Like all times in this format, it’s *n* digit hours, 2 digit minutes, 2 digit seconds and 1 digit tenth of second, with the separators “:” and “.” – as in: “1:23:45.6” for one hour, twenty-three minutes, fourty-five seconds and six tenths.
- Length
- The duration of the workout, same format as above.
- Interval
- *???*
- Upper*?* and Lower*?*
- The upper and lower heart rate zones.
- Timer*?*
- *Evidently, this heart rate monitor must have timers. 🙂*
- ActiveLimit
- *???*
- MaxHR, RestHR
- The maximum and resting heart rates as entered into the settings panel.
- StartDelay
- *???*
- VO2Max
- Maximum oxigen intake volume. Another option set with the watch settings.
- Weight
- Your current weight, used for power output computations.
The comments you added in the software to this particular workout.
[IntTimes]
No information available.
[ExtraData]
No information available.
[Summary-123]
This section deals with the heart rate zones and with how much of the workout you spent in any of them.
[Summary-TH], [HRZones], [SwapTimes]
No information on these is available at this time.
[Trip]
Summary information about the trip. This contains the following items in order. Items are not described in any detail, they are just listed in fixed order. Current information about this section is surely wrong. If you have more information, please add it to the forum.
[HRData]
This is the set of core data as coming from the monitor. This is structured as one sample per line, with each line containing information in the following order:
- heart rate
- speed
- cadence
- altitude
- power
Unrecorded items are just omitted from the list. To know which items were included, you need to understand the SMode field above.
SMode
This bit field indicates what items were recorded and how. Here is a lineup of bits:
- speed
- bit 7 (highest, first character of string) indicates that **speed** has been recorded.
- cadence
- bit 6 indicates that **cadence** has been recorded.
- altitude
- bit 5 indicates that **altitude** has been recorded.
- power
- bit 4 indicates that **power output** has been recorded.
- bike
- *bits 1-3 represent the bike number.*
- units
- bit 0 (lowest, last character of string) is set to 1 for imperial, to 0 for metric units.