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
  • Cool good luck with that!

  • Thank you for the information!

  • In case anyone else is planning on a backyard ultra type event, here is the final version of the field I used.  Some notes:  The lap distance was supposed to be 5.5km but I never trust trail race distances so the code will adjust the distance based on the actual first lap (then do a running average).  Good thing as the actual lap distance was 5k.  I think you could dump the running average.  Risk is if you hit the lap button early by accident then the lap distance is messed up.  Used a 5sec pace - likely would move this to 10 or more next time.  Overall worked great.  As you got further into each lap the estimated finish became more accurate and it did help me track my pace.  During the "rest periods" it switches to show time left until next lap. V3 is the starting lap distance, V2 tells if it is a running or rest lap and is used in calculations, v1 is the currently used lap distance.

    SETV(3,5.5);SETV(2,((lapcount + 2) mod 2);SETV(1,ifs(lapcount EQ 0,GETV(3),lapcount EQ 1,lastlap(lapdistance), (lapcount GT 1 AND getv(2) != 0 AND lastlap(lapdistance) GT getv(1) - 1), getv(1) + lastlap(lapdistance)/2));if(getv(2) EQ 0,(laptime plus ((getv(1)*1000 - lapdistance_raw) / timeavg(speed_raw, 5))),(3600-lastlap(laptime)-laptime)))

    Secondary field used at top of screen showed time of day and pace during run and next lap number during rest period.  Some issue with the pace formatting when it dropped to >10min/km (which it did on many of the steep hills).

    if((lapcount +2) mod 2 eq 0,if(timer mod 10 lt 5, formattime(timeofday), Formatpace(lapdistance_raw / timeavg(speed_raw, 5))), if (timer mod 8 lt 4, 'REST!', 'Next lap ' + (format((round(lapcount/2)+1), '%.u'))))

  • Hi FlowState, 

    Just wanted to verify what I'm seeing:  alerts will not go off when the watch is paused.  I was trying to set up a datafield that would alert every 30 seconds when paused and speed/pace was GT .89408 but no luck so simplified it to alert(elapsedtime GT 20) which worked while timer was running but not when paused.

    Original was

    alert(timeavg(speed_raw,4,1,2) gt 0.89408 and (elapsedtime-max(elapsedtime)) gte 30 AND (elapsedtime-max(elapsedtime)) mod 30 lte 0.1)

    Thanks

  • @razmichael Hey, you're absolutely right. Most of the "analysis functions" work differently while the timer is not running, like min() or max() ignoring data. Alert() is kind of a funny one because it notifies you but it also returns a value (0 or 1). I can still think of situations where you might not want to have an alert while paused.

    I'll have to see if I can add a parameter to alert() to override this behaviour, without making the app too big.

    Thanks!

  • How do you get the garmin functions? Do you pull these or are they built in functions of the garmin? I'm looking for pulseOx on the 5x plus. 

  • How do you get the garmin functions? Do you pull these or are they built in functions of the garmin? I'm looking for pulseOx on the 5x plus. 

  • The Garmin data is mostly built-in data that's been available to apps through the Connect IQ API. Some of the data is calculated, like lap data. PulseOx is not available, unfortunately.