Hi @greis nice to see you here as well!
Officially we do not support training targets/constraints yet (we first have to get beyond the PM5 interface capabilities/limitations for that, so that is for our MQTT interface only, and perhaps a future intervals.icu direct import).
I have some stuff in early testing for the reporting side. Currently HR data is part of the stroke data and indeed one might miss one or two updates (a HR monitor tends to report only once per second). For many purposses it suffices, but indeed when looking at the target-adherence, that might be problematic.
First step for us is to to follow the approach Garmin also uses: the FIT file structure has an element called “Event”. This stores all start stop events (and it should contain WorkoutStep changes (i.e. new Intervals). It also contains all alarm statusses during a session, including:
- HR (HRHighAlert and HRLowAlert),
- Power (PowerHighAlert and PowerLowAlert),
- Speed (SpeedHighAlert and SpeedLowAlert) and
- Cadance (cadHighAlert and cadLowAlert).
It does so by indicating an event with “HRHighAlert” with type “start” to indicate the rower exceeded his target zone, followed by a “HRHighAlert” with type “stop” to indicate the rower returned to the intended zone. For us, this would be the first step, as we already treat all this data seperatly and thus can manage these alerts inside our FIT-recorder. It answers a lot about goal-adherence, but it might be problematic how to identify if people left HR Zone 2 and entered HR Zone 3, while their training dictates they stay inside Zone 2 or 3. Inside the Garmin ecosystem this isn’t an issue as most trainings are limited to a single zone, but we want to be a bit less restrictive here.
The FIT-file spec also supports a “hr” element. I have not seen it used in the wild yet, including Garmin, so it is a bit tricky to see what all values should be (are some optional, I don’t know). And it might even be that intervals.icu and others don’t even understand it. It allows to store HR values outside the records structure. For us it would be easy to add that element (once we understand the parameters) to all our recordings essentially dumping the HR data as it comes in. This would make the data processing even more accurate as you don’t have to wait for the passing of a second to record the data along with time and distance.
For us, both approaches are clearly on the table for the next release. The seperate HR element is interesting, as it would allow a more accurate handling of HR data (for us, it is another event fired at us), and it would allow decent handling of HR data during pauses.