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
  • Yes the pattern remains the same. Nice, it works, thanks, let's see if I can show text. 

  • And another example with a similar format: that I use for backyard ultra style train races (start next loop on hte hour each hour):

    setv(1,ifs(lapcount eq 1,lastlap(distance),lapcount lt 1, 5.5,lapcount gt 1, getv(1)));
    if(lapcount mod 2 eq 0,(3600-laptime) +((getv(1)-lapdistance)/timeavg(speed,180)),(3600-lastlap(timer)+laptime))

    First line is just to recalculate the loop distance to correct if it is not the same as the stated distance.  Second line displays either the estimated time left for the loop based on average pace that loop and, once the lap button is pushed at the end of the loop, time remaining to the start of the next loop and so on.

    the "if(lapcount mod 2 eq 0,(..." if statement allows you to display anything you want based on odd and even.

  • Ok, rest in strength. If you always have one active and one rest following one another,  then you can use.

    This is a simple one that I've used that show Act=1/Rest=0 (also save how much active time you had in relation to total time)

    recordsummary(sum(getv(1) eq 1)/max(timer)); setv(1,(Lapcount+1) mod 2)

    With an if statement you could check for 1 and show timer and else show something else. 

  • I don't really have that programmers mind set, so no idea how I would proceed on that. What variable would I be checking with the if function?

    Something like 

    'Pause'(if (recordsummary(sum(getv(1) eq 1)/max(timer)); setv(1,(Lapcount+1) mod 2) 1)

  • Try this one

    If( (Lapcount+1) mod 2 eq 1, laptime, 'pause')

    Show lapTime in active and text pause in rest (if you start active).

    Have you tested CIQ datafield GymIntervalTimer. Give you different backgroud colours of your choice and nice recording to file where you see when active.

  • No I haven't tried that one, been looking for a few IQ fields that can do that and the remembered appbuilder.

    GymIntervalTimer seems to bulky as  I don't see any option to turn all that additional stuff off that I don't need.

    But that formula works well, thank you. But yea it would be fun if appbuilder would lets es play with text and background color too.

  • Just to give you an example if you would like to combine text with data:

    If( (Lapcount+1) mod 2 eq 1, 'Active ' + laptime, 'REST ' + laptime)

  • Hi! Any ideas as to when this will be updated for the 840/540? I miss my combo 30s/5min power field for long climbs

  • i upgraded my 945 to the 955 solar
    now i have error with "distanceToNextPoint"...any ideas?

    thanks!

  • I also added the corrected output of the lap number. As Garmins internal lap count data field is useless for this, as it starts with lap 0 instead of 1 and of course counts twice per "activity / pause" interval.

    So it would look like "Active (1)" followed by "Pause (1) followed by "Active (2)...
    Lap 0 and 1 = 1, lap 2 and 3 = 2 and so on.

    If( (Lapcount+1) mod 2 eq 1, 'Active (' + format(((Lapcount+2)/2), '%.0f') + ')', 'Pause (' + format(((Lapcount+2)/2-0.5), '%.0f') + ')' )

    Best datafield ever.