Data Field: AppBuilder

By user request, this app lets you define your own data field, based on a simple math formula like cadence / 2.

If you want to get fancy, there's conditional expressions (like IF in Excel), functions for data analysis (like MIN and AVG), and the data field can also display the text of your choice. The resulting data can be (optionally) written to the activity FIT file.

With AppBuilder, you can implement almost any field that involves math, such as: calculating normalized power and saving the data to the FIT activity file, showing the average pace for even-numbered laps, or recording the amount of time you sprinted.

Full documentation and examples here:
http://ciq-appbuilder.blogspot.com/

AppBuilder 5:
Now with new features! AppBuilder 5 is a completely new app, so please check it out in the store if you are interested in any of the new features.
https://apps.garmin.com/en-US/apps/fd690281-9c22-4fee-a81e-3b7f39aa67c5

- Store up to four formulas per app. Switch between formulas directly on the watch, without using a phone or PC. With four clone apps, you can store up to 16 formulas total
- User variables. Allows for powerful formulas where information can be stored at one point, like the start of a lap, and used later. e.g. Lap elevation change
- Improved timeavg() options. Allows for simpler, more flexible normalized power function
- More functions and variables

4 clones of AppBuilder are available in the store, so you can have 2 formulas in the same activity
  • Okay, done! (I already had this feature waiting in the wings, but I didn't want to add it until somebody actually needed it.)

    Mind sharing the exact gradient formula you used? I've played with gradients over 50-100 metres, and they all worked okay, but none were exactly like native grade.

    2.6.18: Modern devices: When FIT recording enabled, also record label to summary.
  • Note on FIT recording feature: the label does not display correctly in Garmin Connect (web), but it does display correctly in Garmin Connect Mobile (iOS).

    Seems to be an issue on Garmin's end, which I will be reporting shortly.
  • 2.6.19 Modern devices: FIT recording: remove feature which recorded final value for time/pace as string e.g. "5:30" instead of 330, because of a bug in Garmin Connect (web) which does not display strings properly. All values recorded as decimals now, regardless of display format.
  • Thanks for doing that.

    Mind sharing the exact gradient formula you used? I've played with gradients over 50-100 metres, and they all worked okay, but none were exactly like native grade.


    I just used the formula that you provided in your documentation for gradient over 50 metres. I setup a data screen with that alongside the native gradient field, and compared the instantaneous readings during a ride. They were remarkably close. I also setup your second AppBuilder to record the max gradient, by enclosing the formula inside MAX.

  • No worries! I already had it on the roadmap (and 99% coded), but I'm trying to limit what I add now to what people might want.

    I just used the formula that you provided in your documentation for gradient over 50 metres.


    Nice. I had tried 100m grade and it responded too slowly for my liking. I tried a few other values and eventually settled on 50, but I didn't really have a chance to test it out extensively on a hilly run. Glad it worked for you!
  • Hi FlowState, I am not a programmer so I was curious to explore your app and see how far I could get...
    Truthfully, not very far. I installed and opened the settings and read through your instructions and could see how it solves specific purposes people have in mind.

    I am trying to create a pool swim lap countdown specifically for set distance swims. So the example is I want to swim 10km in a 50m pool. I know I have to swim 200 x 50s. There is no other word than tedious to describe the manual way of managing this so a garmin is a natural fit. What I'd like is a giant sized Lap field showing the number of laps remaining. As a bonus it could show 100m splits or total elapsed time but that is secondary. Is there a way to do this with your forumula setting? Cheers, Adam.
  • Hey!

    Hmm, good question. I have to admit I don't use my watch for pool swimming (although I really need to get in the pool!), so some of this is based on conjecture.

    I also have to admit that the whole point of this app is also it's biggest weakness: you have to know what formula to use. And in a lot of cases, tbh there's already an app out there that already does it. Which is fine. I'm actually really interested in seeing how/whether it can solve problems that haven't been solved elsewhere. And if it can't, that's also useful to know.

    My understanding is that for pool swims, you have to press Lap after each active/rest interval. So if you swim 10 active intervals, 20 "laps" will be recorded in your activity. I did a quick test with "Pool Swim" on my 935 (without actually swimming) to verify that pressing Lap transitions between an active interval and a rest interval.

    So the following setup could work for you, assuming you manually press lap after each active/rest interval. Unfortunately, this won't work with a programmed workout, because of a Garmin bug which prevents apps from counting laps in that case.


    2 field layout
    - Field 1: Timer (built in field)

    - Field 2: AppBuilder: Laps remaining
    Formula: 200 - (LapCount PLUS 1) DIV 2

    100m splits would be a bit problematic, especially if you mean that you swim 50m, rest, then swim another 50m. AppBuilder does have lap time/distance, but it doesn't have the time/distance from the last lap (or two laps ago, in the case of active/rest intervals).

    Maybe you could use the built-in Garmin field for Interval Time/Pace, instead.

    Hopefully that's what you were looking for.

    Explanation.
    - LapCount is the number of laps completed so far (0 during the first interval)
    - LapCount PLUS 1 is:
    1 during your first work interval
    2 during your first rest,
    3 during your second work interval,
    etc.)
    ---
    - DIV rounds off the result of division to a whole number
    e.g.
    0 div 2 = 0
    1 div 2 = 0
    2 div 2 = 1
    3 div 2 = 1
    4 div 2 = 2
    5 div 2 = 2
    etc.

    - So (LapCount PLUS 1) DIV 2 is the number of work intervals completed so far.
    - 200 - (LapCount PLUS 1) DIV 2 is the number of work intervals remaining
  • Thanks so much for the prompt reply. Yeah, the simplicity of your data field app makes it very powerful but will attract quite a few, how to questions I bet.

    For my pool swimming and the Fenix 3 I use, I don't use the lap time as the pool swimming app auto detects the change in direction and treats that as a lap of 50m.

    A typical swim for me goes like this:
    Jump in the pool with the Pool swim app built in turned on and pool length set to 50m. I Swim 1km non-stop and hit pause. The Garmin pool swim app treats this as an interval and so resuming is considered a new interval. This setting can be disabled but for me I'm not fussed about intervals as I am more about overall distance.

    When I complete my swim, and save and sync, it totals the distance of all intervals and that's the overall swim posted on my profile.

    I think your explanation still holds true regardless of whether intervals are manually or automatically triggered. So I will try it tomorrow and let you know how it goes.

    Thanks again. Cheers
  • No worries! It's no problem because the whole point of the app is for it to be useful in some way.

    One thing I'm not clear on. Are you using "laps" and "intervals" interchangeably? (This is where I really wish I used my watch for swimming.) In running/cycling there's only laps (as far as the watch is concerned.)

    What do your intervals look like in GC., in your example?

    50m active x 40 lalps
    Rest
    50m active x 40 laps
    Rest
    ...

    Or:
    1000m active
    Rest
    1000m active
    Rest

    IOW, do you get a lap/interval for every 50m length, or do you just get one when you pause/unpause?

    That would change the formula you use pretty significantly.

    OTOH, if you just want to count lengths remaining (regardless of laps), there might be a better way, assuming that distance is the same variable for swimming as in running/cycling.

    Formula: (10000 - distance_raw) / 50
    (Just calculates the number of 50m lengths to go)
    Display format: Number (rounds off the result to the nearest whole number, so you don't get weird values like 155.5 lengths to go)

    Anyway, good luck!

    10k of pool swimming sounds brutal, btw. Kinda of puts marathon training in perspective for me :P.
  • Here's an example:

    https://connect.garmin.com/modern/activity/646472910

    As you can see by the Interval tab, Intervals are just the point at which a swimmer stops. They aren't the same as laps. You can get 100m split times by the way the app auto calcs based on 100m splits over the total time elapsed per interval / activity.
    I can see where you are going with distance_raw approach. I will test both and report back results.
    Thanks so much.