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 not available for my fenix 6 sapphire in the Garmin IQ Shop.

    It should be available now as far as I know.

  • OK, got it! - IQShop had my old watch in mind. Now I changed it to fenix 6 sapphire - and it works!

    By the way: I couldn't find out what the difference is between appbuilder 5 and appbuilder 5+.

    Is there a link where I can read about?

    Regards

  • AppBuilder 5 is a "simple data field" which displays one formula / value, and runs on all watches.

    AppBuilder 5+ is a "complex full-screen data field" which displays 2 to 6 formulas (on a single page), and only runs on high end watches, due to the memory requirements associated with supporting 6 formulas and drawing all 6 fields in the app. (AppBuilder 5 relies on the watch to draw the field, which saves memory, but which also means that it can only display one value.)

    The main reason to prefer 5+ is that Garmin watches have a limit of 2 IQ fields per activity, so full-screen data fields like 5+ allow you to display more custom information than simpler data fields.

    You can install up to 2 copies of AppBuilder 5 in a single activity, for a total of 2 custom formulas.

    Or you can install up to 2 copies of AppBuilder 5+ in a single activity, for a total of 12 custom formulas.

  • Wow!!!

    I hadn't dared ask about it,

    but that makes my christmas wishes come true!!!!!

    Thank you! Thank you! Thank you!

    Great job!

  • Good morning, I tried to create a formula (in appbuilder5+ for FR 745 ) to have a sorta of "virtual racer" between current lap and last lap , to have the difference of current lap time and last lap time at the same lap distance. This formula don't works, what is wrong? Is it possible to have a working formula ? Thank you very much.

    SETV(1,LASTLAP(LAPDISTANCE)*1000);SETV(3,PREVD(LAPTIME,GETV(1),1000,1));LAPTIME-GETV(3)

    Alberto

  • Good morning, I tried to create a formula (in appbuilder5+ for FR 745 ) to have a sorta of "virtual racer" between current lap and last lap , to have the difference of current lap time and last lap time at the same lap distance. This formula don't works, what is wrong? Is it possible to have a working formula ? Thank you very much.

    SETV(1,LASTLAP(LAPDISTANCE)*1000);SETV(3,PREVD(LAPTIME,GETV(1),1000,1));LAPTIME-GETV(3)

    Unfortunately that won't work, as the 2nd argument to PREVD (distance) is meant to be a non-null constant, not a dynamic value such as the distance of the last lap.

    The only way I can see this working is to set a different variable for every metre of lap distance, which would take a huge amount of memory and would probably have no chance of working on anything but the highest end devices (e.g. Fenix 6X). Or we could compromise and round to the nearest 10 metres.

    This should work although I haven't tested it. If you run out of memory, change "10" to a higher number. e.g. For accuracy to 50 metres, substitute 50 for 10 below.

    setv(if(lapdistance_raw gte 10, (lapdistance_raw - 10) div 10, null), prevd(laptime, 10)); laptime - getv(lapdistance_raw div 10)

  • Anyone else having problem combining AppBuilder 5+ with other CIQ-datafields in Strength activity on 6x and the latest betas?

    If I first add AppBuilder 5+ and then add Heart rate Delta (now named 'Heart rate: OHR v strap difference' in IQ store) or Laps+, I only get a timer field. This is only in Strength. No problem in Run for instance. And I can combine it with 'Auxiliary Heart rate FR945'.

    It's been working before and I think the problem started with latest betas, from 14.72, but it could also be something else. My watch hick-up maybe.

  • Hi FlowState!

    "Time to Next + Timer" 

    what is wrong with that? 

    thanks!

  • Until "TimetoNextPoint" can be used, alternatively and approximately, the arrival time "TimeratNextPoint" can be calculated through:

    "((distanceToNextPoint_raw / timeavg (speed_raw, 60,0,1)) + ElapsedTime) / 60"

    or:

    "((distanceToNextPoint / (lapdistance / laptime)) + ElapsedTime) / 60"

    I hope you find it useful!

  • Another longing overcome thanks to @FlowState: the expected pace on the course.

    I usually plan my mountain routes with PlotARoute, including waypoints with planned time in the description.

    So I missed being able to see on the watch the time of arrival at each waypoint, and the pace expected in the current section.

    ---------

    ETE_AT_NEXT:
    ((distanceToNextPoint_raw/timeavg(speed_raw, 60,0,1))+ElapsedTime) / 60

    or:
    ((distanceToNextPoint/(lapdistance / laptime))+ElapsedTime) / 60

    or entering the data manually:
    (setv(1,8.00);setv(2,10.00);setv(n,ritmo min/km);getv(findltindex(distance,3.0,15.0,"n"km)+1)*60*DistanceToNextPoint)+ElapsedTime

    PROG_PACE:
    Flat Pace 6 min/km, every 1m+ 10m flat, every 1m- 4.5m flat:
    setv(1,TIMEAVG((Altitude_raw - PREVN(Altitude_raw, 12)) / (Distance_raw - PREVN(Distance_raw, 12)) *100, 60,0,1));IFS(getv(1) gte 0, 60/(6+0.6*getv(1)), getv(1) lt 0, 60/(6-0.27*getv(1))) + " | " + timeavg(speed, 60,0,1)

    or::
    setv(1,TIMEAVG((Altitude_raw - PREVN(Altitude_raw, 12)) / (Distance_raw - PREVN(Distance_raw, 12)) *100, 30,0,1));IFS(getv(1) gte 0, 60/(6+0.6*getv(1)), getv(1) lt 0, 60/(6-0.27*getv(1))) + " | " + (lapdistance * 3600/ laptime)

    or entering the data manually:
    setv(1,8.10);setv(2,9.30);setv(n,ritmo km/h);getv(findltindex(distance,2.49,5.30,"n"km)+1)

    Next Waypoint Screen

    Finish Screen

    Route Timer