Recording Boulder

Hi all,

I am about to write my first app for Garmin watches. It is to record my boulder sessions.
I know there are already apps doing this but as far as I know they all require me to start and stop every single boulder and need to set grades. Way to much to push and press during an activity. My goal is that the app recognises when I am in a boulder and when I finished it. The app is mainly to count boulders and their height and may be a few more things. I nearly finished the basic tasks: I see when I am bouldering and when I am resting. I count the boulder and see their hight. I have a little chart, displaying them during the session.

All my questions are related to the following session configuration:
_activityRecording = ActivityRecording.createSession({
:sport=>Activity.SPORT_FLOOR_CLIMBING,
:subSport=>Activity.SUB_SPORT_BOULDERING,
:name=>"Bouldering"
});
a) Start / Stop Boulder
When I use this configuration, whenever I start the app, it immidiatly starts counting boulder and because I don't plan to use buttons the boulder stops when I stop the app. How can I programmatically start and stop boulder during a running session?
b) Hight of a boulder
When starting an activity, I see the altitude. But when starting at an altitude of lets say 400m then a boulder hight of 2 to 3 meters is not realy visible in the default views of CIQ web portal. In case of a) and I can manage every single boulder, is there a way of setting my own properties for this?
c) Custom FitContributions
When I work with the session settings from above, custom fitcontribution fields aren't displayed in CIQ web portal. But when I use :sport=>ActivityRecording.SPORT_GENERIC for session settings, they are perfectly shown.

Any help is appreciated
Thanks in advance

  • As to disapproval it took it from the interpretation of this

    • Overriding the User’s Data. We do not allow apps to override information previously synced to their Connect account, where such data fields typically come from the Garmin device itself (e.g., speed or distance). We want to maintain the integrity and reliability of data values collected or generated by Garmin’s devices and software.
  • That is exactly why Garmin Connect ignores nativeNum in user data/fitcontrib fields.  But not all sites do,

  • Hi all, I tried again to write data into laps with no success. When using :sport=>Activity.SPORT_ROCK_CLIMBING, :subSport=>Activity.SUB_SPORT_BOULDERING Garmin doesn't realizes laps at all.

    When I use :sport=>Activity.SPORT_GENERIC, :subSport=>Activity.SUB_SPORT_GENERIC laps are shown in Garmin.

    I published the relevant code in a Github repo, just in case, one of you wants to have a look :-)

    https://github.com/henry-1/Test_Garmin_Laps_with_Bouldering_Activity

    Thanks again for all your help

    Henry

  • This reminds me that there are some metrics that are not available in some activities. There was one that is not possible to add to a floor climb activity (I don't remember but maybe cadence or steps) And interestingly enough it's also not possible to add it via CIQ. It's just not present in floor climb. So maybe this is also some restriction that the bouldering activity has?

  • Last thought on this: It seems to be room for improvement of the Garmin documentation. At a first glance they allow us to create apps with their pre-defined and on the first look well documented APIs. But then and only with the help of the community I had to learn the hard way that there are undocumented dependencies and pitfalls like
    - what are the miniumum fields to be defined
    - what are their internal names (or numbers: nativeNum)
    - why are their no laps if you define them in one profile but not in the other
    And they could learn from this thread that not all sports profit from knowing the speed and distance. There are sports out there where those common numbers absolutely make no sense.
    For now I am as disappointed as I was 5 months ago.
    But
    a) for all of you who joined this conversation => many thanks
    b) if in the future something changes, please let me know, I am just a few steps away from finishing my app.

    cheers, Henry

  • Some things are documents, but in the fit SDK,  Profile.xlsx if I recall.

    https://forums.garmin.com/developer/fit-sdk/

    Also, there can be things in the fit that aren't displayed in Garmin Connect based on the sport  The fit SDK has a few different ways to see what's actually in a fit file.

  • Henry, just out of personal interest, how are you recording the grading system and the grades as fit fields.

  • After I learned that Garmin doesn't allow to write their fields and as I am not interested in grades at all I do not manage a field for grades.

    I am interested in the count of boulder and their hight, my heartrate and the active vs.  the inactive time. I looked up grade in the profile excel sheet and found avg_grade in line 539 for laps with the number of 45. I assume this would be nativenum for my custom field. But is it worth trying? As I said before I don't know what else is required to get a valid lap (missing in documentation). I could publish my code completely if you want to have a look? For my PoC I definied 3 fields. One for each: session, lap and summary.

    Instead of measuring real values I calculate random numbers for hight and every 20secs I call addLap().

    For session I use hight and I see a nice graph displayed in monkeygraph, the highest point of the current boulder I use for lap but it doesn't work and in the summary I just have a value for the total boulder count which means how often the 20secs run out.

  • Sounds like you could benefit from posting the code you use to create the 3 fields

  • You can’t set Garmin fit field values from your app (as far as I’m aware).  You’ll have to.add an equivalent field and call it something else. Garmin May not approve of that though.

    As to disapproval it took it from the interpretation of this

    • Overriding the User’s Data. We do not allow apps to override information previously synced to their Connect account, where such data fields typically come from the Garmin device itself (e.g., speed or distance). We want to maintain the integrity and reliability of data values collected or generated by Garmin’s devices and software.
    That is exactly why Garmin Connect ignores nativeNum in user data/fitcontrib fields.  But not all sites do,

    My 2 cents:

    - jim_m_58 is correct here

    - the most reasonable interpretation of Garmin's statement "We do not allow apps to override [native activity metrics]..." is that they have made it impossible (e.g. through technical means), especially since that interpretation matches reality. CIQ devs can't set native Garmin FIT fields and nativeNum -- the actual technical method for "overriding" native FIT fields -- is completely ignored by Garmin Connect

    - I'm not a lawyer, but I don't think Garmin means that if you create some developer FIT field called "Speed2" or even "Speed", then Garmin will be upset at you because you're allegedly trying to fool the user. Why do I think that?

      - All CIQ fields are clearly marked as such in the Connect app and website.

      - CIQ fields (whether they use nativeNum or not) are completely ignored for the purposes of derived metrics, stats, history, etc. If you use nativeNum, that fact will be ignored by Connect. If you don't use nativeNum, then Garmin has no reliable way to connect your field to an equivalent native field. Either way, they already said that they won't do it.

    As matter of fact, I use the Stryd data field, and it records a bunch of fields which also exist as Garmin native fields, such as "Power" and "Cadence". Notice that they didn't even bother to use names such as "Stryd Power" and "Stryd Cadence" to assure the end user it's not data that came from the Garmin device.

    So far Garmin hasn't banned them from the store.

    OTOH if someone found a way around this system and managed to publish a CIQ data field that writes to native FIT fields, then I'm sure they would be banned. As far as we know, that's impossible (barring an unknown exploit in CIQ.)