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
  • So working my way backwards, the pieces of this code seem to work if I test them on their own, but I get an IQ error when I try to load the whole lot. I am guessing it is just too much for the watch. I've shrunk it multiple ways but nothing seems to be enough. One version attached. Running it through the validator seems ok, but my FR935 doesn't seem to like the code and complains with a !name. Any suggestions will be much appreciated. :-)

    Big Version

    setv(8,lastlap(lapavg(nonzero(speed))));setv(9,lapavg(nonzero(speed)));setv(10,avg(nonzero(speed)));setv(11,nonzero(speed));setv(if(LapCount gt 0,if(LapCount neq getv(6),7,null),null),getv(8));setv(1,if(LapCount gt 1,if(getv(8) gt getv(7),'+','-'),' '));setv(2,if(LapCount gt 0,if(getv(9) gt getv(8),'+','-'),' '));setv(3,if(getv(11) gt getv(9),'+','-'));setv(4,if(getv(11) gt getv(10),'+','-'));setv(5,if(getv(9) gt getv(10),'+','-'));setv(if(LapCount neq getv(6),6,null),LapCount);if(timer_raw eq 0,'5DP1-Test-4.2',getv(1)+getv(2)+getv(3)+formatpace(getv(11))+getv(4)+getv(5))

    Shrunk Version

    setv(8,lastlap(lapavg(nonzero(speed))));setv(9,lapavg(nonzero(speed)));setv(10,avg(nonzero(speed)));setv(if(LapCount gt 0,if(LapCount neq getv(6),7,null),null),getv(8));setv(1,if(LapCount gt 1,if(getv(8) gt getv(7),'+','-'),' '));setv(6,LapCount);getv(1)+if(LapCount gt 0,if(getv(9) gt getv(8),'+','-'),' ')+if(nonzero(speed) gt getv(9),'+','-')+formatpace(nonzero(speed))+if(nonzero(speed) gt getv(10),'+','-')+if(getv(9) gt getv(10),'+','-')

    Code

    !3AWYAAAAAAAAACAgCAgEOAQEEAQEuAQEbAggJAgIBDgEBBAEBGwIAEwgKAgIBDgEBBQEBGwIAEwgLAgIBDgEBGwIAEwIdCAAAFwIdCAYBGgEAEQgHAgABAAMCAAEAAwgIARoBARsCABMIAQIdCAEAFwgIARoBCAcBGgEAFwQrAAQtAAEAAwQgAAEAAwEbAgATCAICHQgAABcICQEaAQgIARoBABcEKwAELQABAAMEIAABAAMBGwIAEwgDCAsBGgEICQEaAQAXBCsABC0AAQADARsCABMIBAgLARoBCAoBGgEAFwQrAAQtAAEAAwEbAgATCAUICQEaAQgKARoBABcEKwAELQABAAMBGwIAEwIdCAYBGgEAEQgGAgABAAMCHQEbAgATAwEIAAAPBDVEUDEtVGVzdC00LjIACAEBGgEIAgEaAQAGCAMBGgEABggLARoBAScBAAYIBAEaAQAGCAUBGgEABgEAAwAT

  • my FR935 doesn't seem to like the code

    Sorry, FR935 doesn't support encoded formulas bc it doesn't have enough memory

  • Cheers. My FR935 is about 5 years old. Any recommendations on new models that work well with AppBuilder? FR9X5 vs Fenix vs Others?

  • Fantastic app! I hope people are still working on it. Following this post, I am trying to create code for an alert that goes off when I start moving while GPS recording is paused/stopped. The example given in this post is:

    when(speed_raw lt 0.89408, 5, 5, 0, 1); speed

    This indeed works (I get an alert) when I start moving and the timer is on. However, I don't get an alert when I have paused the recording. Presumably the Appbuilder data field does not function when the watch is paused and doesn't show any data fields. But I wonder: Is there a way around this so I can get an alert when the GPS recording is paused?

  • Hi, congratulations on the app.
    Can someone confirm if the following code is correct?

    (timeofday + distanceToDestination_raw / ((distance_raw - prevt(distance_raw, 300, 300)) / 300)) mod 86400

    I'd like to get the final ETE, but it doesn't work on Fenix ​​8.

  • Analysis from my life coach (Chat GPT ;-):

    Conclusion
    The code calculates an estimated time of arrival (ETA), expressed as seconds since midnight, based on the average speed over the past 5 minutes. It uses mod 86400 to ensure the time remains within a 24-hour range.

    Do you want seconds?

  • Thanks, no it's not a matter of seconds, it's just that I don't see any data on the watch when I navigate a route.

  • Have you tried to wrap around a "formattime() function around the whole thing? I am using:

    formattime((timeofday + distanceToDestination_raw / ((distance_raw - prevt(distance_raw, 120, 120)) / 120)) mod 86400)