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
  • AppBuilder 5+ is a full-screen "complex" (*) CIQ data field which draws several "fields" of its own. From the POV of the watch, it's just one field / app instance. For watches, the limit has always been 2 CIQ data fields per activity, with the exception of the 735, which allowed 3 fields.

    (* A "complex" CIQ data field is responsible for drawing its own contents, which is why it can draw a full page containing fields of its own as long as you add it to a 1-field layout. AppBuilder 5, on the other hand, is a "simple" CIQ data field, which means that it's only responsible for returning a value - the watch handles drawing the contents.)

    I haven't updated AppBuilder 5+ to support newer watches, which is why you don't have the same ability on your 965.

    As an interim measure, you could display 2 formulas per field, using string concatenation.

    e.g.

    hr + "|" + cadence

    One of the downsides here is that the font will be tiny.

  • I will give that a try.  Your app is really fantastic.  On my Garmin 645, I was calculating my pace for the last rolling 0.5 miles and 1 mile.  Really useful for training.  I also used it to compensate for GPS error (0.7%).  Are you planning on releasing 5+ for 965?  Thanks again.

  • Glad you like the app! Thanks for the kind words. It's always interesting to hear how people are using AppBuilder.

    Updating all my apps for the latest watches is on my wish list, but I cannot say if and when it will happen. Unfortunately, it's a ton of work to adapt my apps to newer watches with different screen resolutions. (This is partly my fault, as I did all the layouts by hand with my own custom "layout engine", to save memory and cram more features into older watches. At the very least I should've automated the process of creating the layouts. It's also a huge pain to test everything.)

  • Hey great app!

    is there any way of calling the Multisport timer? Or even a way to call the original start time of the multisport activity?

    I want to create an ahead/behind timer for my run in a triathlon so would need to know how long my swim, bike and transitions were before starting my run. 

  • Sorry, no. If I'm not mistaken, each leg of a multisport activity is like a separate activity, so at the start of each leg, it's like the previous instance of AppBuilder stops and a new instance starts. Unfortunately, AppBuilder doesn't have a way to persist data between instances, so you wouldn't even have a way to capture the time of day at the start.

  • At first I want to say thank you for that great app!

    Then I have 2 questions:

    • I noticed that also some Unicode symbols can be displayed on the datafield. Is there a list available on which symbols are supported?
    • I am configuring a datafield with 3 values. The first one should be the vertical distance to the destination (while navigating a course). So i tried formatnumber(Altitude_raw  - elevationAtDestination_raw) and just Altitude - elevationAtDestination, but none if them worked, both show only '- -' and no value. What am I doing wrong?

    I am using appbuilder on a fenix 7xSS.

    Edit: I noticed I wrote it the wrong way around, should be elevationAtDestination - Altitude. The problem is still the same though. 

    Edit2: I am navigating a course. Is elevationAtDestination not available for course navigation?

    Edit3: After some further tests, it seems that indeed elevationAtDestination has no value when navigating a course :( . I got a value when i started navigation to a saved location, but the value was 2147483647, where the correct value should have been 145m. The Garmin internal datafield shows a reasonable value, so the watch seems to "know" the elevation, but somehow it doesn't get through to Appbuilder. 

  • HI,

    I have been trying this for a few days but cannot seem to get it working correctly.

    I have several fields set up fine, but I also want to use average pace in min per KM for the overall run.

    My watch (Fenix 6XPro) is set to miles, so I use this app to get distance in opposite units which helps when I am pacing at park run for example.

    I am currently using this formula

    recordsummary(formatpace(avgspeed_raw*3.6))

    with the display format set to pace, and I have the record data to FIT file checked.

    However I do not get accurate results and the recorded data just gives ".00"

    Any help with this please

  • I am currently using this formula

    recordsummary(formatpace(avgspeed_raw*3.6))

    with the display format set to pace, and I have the record data to FIT file checked.

    However I do not get accurate results and the recorded data just gives ".00"

    Unfortunately, AppBuilder's recording functions only support numbers, not strings.

    You could record your speed in km/h and format it as pace:

    formula: recordsummary(avgspeed_raw*3.6)

    format: pace

    But if you have to convert the value after the fact anyway, seems like there's no point in recording it, since you can just convert the value that's displayed on the website.

    You could also record pace in decimal minutes per km, while displaying minutes and seconds as usual

    formula: recordsummary(1 / (avgspeed_raw / 16.667)) ; avgspeed_raw*3.6

    format: pace

  • Edit2: I am navigating a course. Is elevationAtDestination not available for course navigation?

    Edit3: After some further tests, it seems that indeed elevationAtDestination has no value when navigating a course :( . I got a value when i started navigation to a saved location, but the value was 2147483647, where the correct value should have been 145m. The Garmin internal datafield shows a reasonable value, so the watch seems to "know" the elevation, but somehow it doesn't get through to Appbuilder. 

    Seems like a bug in CIQ :/. Wouldn't be the first time.

    I'll try to see if I can find some time to look into it. If I can reproduce it, I'll file a bug.

  • Many thanks,

    Now it appears correct on my watch but records on Garmin Connect in a weird way. e.g

    My last run was at 8 min 30 sec per mile, which should be 5 min 17 sec per km. This was shown on my watch but it recorded on garmin connect as 11.35, so its is recording my speed in KPH not my pace. How can I get it to record pace please?

    My goeal is to have min per KM shown on my watch and min per KM recorded on Garmin Connect whilst my watch is set to miles as the primary distance unit.

    Currently i have the following

    recordsummary(avgspeed_raw*3.6)

    Display format: Pace

    Thanks