App: The S.M.A.R.T.

Former Member
Former Member
The Singular Multipurpose Activity Recording Tool.

The flashy name I settled with after making my first crash-free run using this app 8))

Preface:
First of all I'll try to explain why did I decide to create a complete app replacement.
I'm not that young to run sprints and mostly do it for stamina aiming to complete my workouts in specific HR zones. After I got used to my Forerunner 230, it became rather obvious, that present HR notifications are not the thing I was hoping for: using standard data field layout I didn't receive notifications at all (happened constantly during early 2016 firmwares, maybe something changed now) and for the custom data fields I received them only when value changed outside of defined range, but e.g. if I run with constant pace and HR is high but doesn't change (happens to me quite often), then I don't receive notification, which is not good for long anaerobic runs when it's hard to monitor values regularly. Another thing about notifications is that they completely replace all other data fields on the screen for a couple of seconds - exact time when I receive vibe and look at the watch to check what was the reason behind it. So, basically, I wanted more advanced notification system with the ability to see other values and notification remaining on the same screen. At that time I also got back to the next book in R.Jordan's "Wheel of time" series, so, in a couple of runs intertwined with reading, I was pretty sure how this app needs to look like ;) With this app I aimed to replace native running and biking apps for Forerunners 23x and any other applicable types.

Application:
The main idea is to display important values located on a "wheel", which can be "rotated" in any mode (before, during or paused recording) to display different metrics. Much like standard screen switches, but still a little bit more fancy.
Currently application houses 16 data fields ranging from basic values, that are read via Activity.info, to complex ones. Activity list includes walking, running, cycling, skiing and training, where last one is reserved for indoors activities and doesn't enable GPS to improve battery usage. Application with 10 fields enabled, 69 second pace smoothing intervals, default intervals/waypoint sets and alerts/settings used takes around 60 out of 64 kilobytes of memory during recording cycle, so, unfortunately, there's no room for new features. The most embarassing thing is that out of 64kb available application byte-code itself eats around 48kb and to reduce that I need to remove code, i.e. to cut some functions out, which I don't want to. Furthermore, some data is user configurable and I cannot predict it's size in the memory, thus, "out of memory" error may occur on heavy setups. I advise to test your setup in activity recording mode before important events to find out whether it's stable enough for your purposes.

Simple fields:
- elapsed time,
- current speed (has setting, which defines auto-pause threshold, i.e at which speed value recording will be paused/resumed, thus, to add auto-pause to activity it's enough to enable field and set threshold, this way auto-pause is not global but activity-based),
- average speed,
- current pace and average paces,
- elapsed distance,
- current cadence,
- current heart rate,
- altitude,
- calories.

Complex fields:
- Smoothed pace (current pace values rolling average over the defined time period, up to 69 seconds), also displays cadence value with zone color, has settings, which allow to select value type (speed or pace) and define smoothing interval in seconds, has range alert;
- Improved heart rate field with zone color indicator, percentage, activity max HR and training effect, for watches with firmware, that doesn't support HR zones in user profile, has setting, which allows to set HR zone values, has range alert;
- Interval timer, works much like standard workouts, displays element name instead of field label and presignals the end of the element, segments consist of time and distance elements, segment has repeat count including infinite loop, has settings, which allow to select one of the interval definitions from list and/or let this field trigger activity laps when interval element finishes;
- ETA aka Estimated Time Arrival, is a subclass of intervals data fields, but displays estimated completion time for distance elements based on first active speed or pace type fields, has setting, which allow to select one of the interval definitions from list;
- Directions field, has settings, which allows to select way point set and WP sequence, based on this setting displays either current coordinates or arrow pointing to the next way point and arrow pointing north; since Forerunners are lacking magnetic compass, this can be achieved only during movement, when heading vector can be calculated; due to raw GPS values changes, arrows may flicker unless stable satellite coverage is achieved, processes Back key input during recording, which switches to the next way point if field is centered or adds current location to WP list;
- Lap time field, displays time of a current lap, time of a previous lap and difference between those, has setting, which allows to select WP list to automatically trigger next lap when one of the waypoins is in the vicinity, processes Back key input during recording, which triggers next lap (lap field can be anywhere on the "wheel", even offscreen) and adds current location to WP list, lap number 0 is not a bug, it's expected behavior, since most of my personal trainings start with warm-up section and I like to see when my actual 1st lap starts after that, although lap numbering changes after uploading to Garmin Connect;
- Pacemaker, I don't know exact math around Garmin's virtual partner, but mine is quite simple: it's a difference between activity elapsed time and time, which will be taken by a pacer with a constant speed to cover the activity elapsed distance, has settings, which allow to select value type (speed or pace) and set it's value.


Any combination of up to 10 simple and complex data fields can be set as active simultaneously, field setup is stored for current activity type, different setups including alert values and field settings can be defined for each of the activity types. Fields have settings and alert ranges, which can be configured on watch before and during recording by holding Up key (pressing Menu on FR630). Menu structure is rather simple, so feel free to explore. Order of fields means the sequence in which they appear on "wheel" with the last field in list being displayed before the first one. Active, Alerts and Settings data field submenus are self explanatory. If nothing happens at the Select press on the Settings or Alerts menu, then this means, that current setup doesn't contain applicable fields. I refer to "keys" but input processing is implemented via behavior delegates, thus it should work with corresponding gestures on FR630.

Notifications, the thing I started this project for, work in the following way: if field value alert appears, then alerting field is automatically brought to center row, displaying value in red if it exceeds the highest alert range value, or in blue if it is below the lowest (zero from each range side being considered as and open range), this field will stay in focus until value goes into range with continuous vibe/tone alerts every 5 seconds. When value goes back into range "wheel" will scroll back to the position, at which alert switched central row. If another field is about to give notification while there's still alert in focus, another vibe will be given to notify user of the upcoming alert, but it won't be centered to replace current alert. Currently, only 2 fields allow to enter alert ranges: Smoothed pace and HR Plus, but application is arranged in a framework way, so that it's easy to add ability to enter alert ranges to the whole groups of fields (e.g. time values like time and pace). For this I expect to get user feedback, since all of the value alerts, that I wanted for myself, are already there.

This explanation may be obscure, but it's much easier to see this in action. I ran with this app for about a 100km already and find it rather convenient with a default field order for running activity reflecting one of the most usable setups (imho).

Also, there is a mobile companion for Andrioid 4.4+. Since Garmin Mobile doesn't expose extensive configuration abilities, there's no other way than help oneself...
Companion allows to configure interval definitions and define waypoints by either just long pressing at Google map layer, entering specific coordinates (good to define specific way points for autolap functionality) or even importing user waypoints from watch. There are no plans to release similar companion for Apple devices, since I'm unable to maintain hardware and/or virtual development environment. Although there is an idea to create web configurator like dwMap app does, but unfortunately this won't happen in near future, since time is scarce and we all must do something for a living except having nice hobbies.
  • Former Member
    Former Member over 8 years ago
    ETA field and Waypoint concept explanations

    For the ETA field to calculate estimate of a current interval distance type element it's necessary to enable at least one of the Speed/Pace data fields, meaning Current or Average speed/pace or Smoothed Pace, otherwise it will act exactly like intervals data field, showing value left to the end of current interval element. After some experiments I consider this to be one of the most universal solutions, since during GPS based activities there is always at least one speed or pace data field user wants to see and also expects this value to influence estimate calculations. For example, if you enable Smoothed Pace data field for a Running activity type, then it's value will be used to calculate estimated completion, but for Cycling activity type you usually enable current or average speed field, in this case speed value will be used to estimate completion time.

    Being subclass of intervals, this field allows for a complex milestone definitions including optional warmup and intermediate rest elements. For example, if interval consists of 5min warmup, and infinite repeat segment with 5km distance and 3min rest elements, then ETA will first show warmup countdown, then ETA to 5km, then 3min rest countdown, then ETA to 10km etc.

    If both Intervals and ETA are enabled and configured to use the same interval definition, then this will improve memory footprint during activity recording, since interval definition is allocated only once and shared between these fields.
    Contrary to Intervals data field ETA doesn't provide presignalling of element completion and is intended to be used as a dedicated information field. This is made on purpose and is not a bug. Subject to improve based on user feedback.

    New Waypoint Implementation
    In version 1.4 for both the S.M.A.R.T. and mobile companion new waypoint storage and use case introduced.

    I'll go a little off-topic describing mobile companion usage to make concept clear: from now on user can configure several way-point containers in mobile companion and move waypoints between them freely. There is always a "Sandbox", which contains all of the WPs by default, but user can create new WP set and move points from said Sandbox or any other existing WP set into new one. When user deletes WPs from the named set or the whole WP set, they are moved back to Sandbox, since we want our data to be safe and sound in case if one occasionally presses "Delete Set" button. WP deletion from Sandbox is final and must be confirmed for each point.

    Getting back to the S.M.A.R.T. application itself, there are two fields, that used WPs before v1.4 and it seemed strange enough to use common WP list for both Lap Time and Directions data fields from the start, right? Now both of these fields have setting, which allow to select from the synched WP sets list including "No" option. In case of Lap Time this means, that you can either select short list of actual "lap" type way points or make field purely manual lap field by changing setting to "No". In case of Directions, this means, that you can select necessary role WP list and this setting will be linked to the selected activity type, since settings are stored in an activity context. This allows, for example, to configure separate "Biking" or "Running" WP sets for different activity types or compose route-like WP sets much like Garmin Connect routes, which are currently available only for Fenix 3/Bravo/Quatix watches. Options are plenty. Btw, if option "No" is selected for Directions, it will act as an almost simple data field, displaying current coordinates with red arrow pointing north. Another noticeable change in Directions data field is that now it can change the direction of processing assigned WP list: ">>>" symbols at the center of field means, that if current WP is in the vicinity or user focuses on field and presses "Back" button, then next WP in list will be selected, if "<<<" is displayed - previous WP is selected in the same way. Sequence can be switched via field settings.

    Last but not least point of interest is that from now on it's possible to save WPs from current location and send them back to mobile companion for further processing after activity was completed and saved. For this feature to work it's necessary to add either Lap Time or Directions data fields to active fields and configure settings so that they use one of the WP sets. For the Lap Time any time during recording "Back" key press adds new lap and adds current location to way-point list of this field not only saving it for further sending back to mobile companion but also instantly enabling it to be used during current activity. This means that if you have at least one WP on the Lap Time list, then triggering lap manually adds current location to data field WP list, if you come back to this location next time during current activity, then automatic lap will be triggered. This works for the Directions in almost the same way, the only difference is that Lap Time field has hard-coded priority, meaning, that if both Lap Time and Directions are present among active fields, then pressing "Back" will trigger new lap adding current location to Lap Time data field WP list, if Directions is active, but Lap Time is not, then pressing "Back" adds current location to Directions WP list. After activity is completed and saved, all of the WPs added during activity are saved to application storage and cannot be used in the next activity until they are sent to mobile, organized in existing/new WP sets and synched back to watch. To send stored WPs to mobile companion it's necessary to 1) connect watch to phone and 2) start the SMART companion app, after that option "Send Data" becomes available in the S.M.A.R.T. menu on watch. These temporary WP's will be deleted from watch after successfull sync.


    Well, I wrote a whole buch of text, but it's much easier to explore the app by using it and return here for reference if something becomes unclear.
    I'm sane person and accept reasonable critics, so, feel free to provide feedback, although I don't guarantee timely response.

    Best regards and never forget to aim for the better and think positive 8)
  • Hi,

    first of all, thank you for your great App "The S.M.A.R.T" - atm i'm using it on my forerunner 630.

    One question: can you add the other activities from garmin connect as well? Especially i'm interested into Rowing, Crosstraining and Indor Running.
    Atm i'm using the garmin default activity and change the activity manually after then in garmin connect...but this is very annoying...

    It is also cool if you can realize that every user can create new activities within S.M.A.R.T...

    Thanks and all the best wishes from Germany, Munich - Michael
  • Thank you for such a great improvement of the Garmin watches and for returned "auto lap by position" function :)
    It look far more better than origin garmin's activity interface.

    But I have one issue with cycling activity: it seems that the app doesn't recognize modern speed/cadence sensors (https://goo.gl/xoCDzB). It displays 0 for cadence and GPS speed only (0 while I'm on trainer). I tried "training" (no gps) activity, but result was the same.

    Just in case, I have 735xt watch with latest (4.05) firmware version and latest (1.4) app version.

    Thanks again for time you spent developing this app.
  • I am clearly missing something on how to use the app properly. I've looked but can't seem to find documentation/manual for it.

    So I've created my interval workout using the companion app on Android and pushed the interval workout to the watch (735XT) but I can't figure out how to activate the correct interval workout on the watch, especially when I am only running with the watch.

    What is the method on the watch to select the specific interval workout I've created?
  • Second question, how do I adjust the items displayed on each screen on the wheel? There are 2 things I want to see on the same screen

    1) heart rate
    2) elapsed time

    The screens with these items exsit about 2 or 3 pages apart so I am continually cycling back and forth to see those metrics.
  • Former Member
    Former Member over 7 years ago
    I am clearly missing something on how to use the app properly.

    Hold the "Up" key within the app before or during activity, the main menu will open, go to the Data Fields submenu to reorder, add or remove values from "wheel", set alert ranges and change settings, you'll be able to use your interval as a setting for either ETA or Intervals field.
  • Hold the "Up" key within the app before or during activity, the main menu will open, go to the Data Fields submenu to reorder, add or remove values from "wheel", set alert ranges and change settings, you'll be able to use your interval as a setting for either ETA or Intervals field.


    Okay, got the reordering, that makes sense now, but still not groking getting my intervals to be selected

    So here's what I am doing, goto the app, hold up button. choose data fields, choose settings, choose intervals, then my 2 options are basic running and interval running, choose the latter and it pops me back up to the previous menu level. Don't see my interval set which I've called 4x20x200.

    Now I back out to the main app, and I see your default interval with 02:30 warmup, mine is set for a 5 minute warmup.
  • Former Member
    Former Member over 7 years ago
    Now I back out to the main app, and I see your default interval with 02:30 warmup, mine is set for a 5 minute warmup.

    Are you sure you have sent interval data to watch from companion app? Did the "toast" message "Success" popped up after you did that? In one of the previous version of companion there was some kind of problem sending intervals data when old structure was used, I was sure that this is fixed now, but just in case it is not, the workaround is still there: change the intervals name/structure and switch to another companion app page (activities or waypoints), this action forces data to be updated in companion settings file, which is used to assemble watch message. To make sure data has changed you may update interval name, this way you'll see difference right in the intervals settings selection menu.
  • Hmm, something is clearly borked after the last couple firmware upgrades, 8.40 being the start of things, see:

    https://forums.garmin.com/forum/into-sports/running/forerunner-735xt-aa/1266869-8-40-resets-all-widgets-when-installing

    So, access to all IQ apps was missing, they fixed that in a later firmware, 8.5 I think, Now I can upload other IQ Apps to my 735XT and push changes in intervals from the companion app, however The SMART is nowhere to be found on the watch, I've uninstalled and reinstall from the Connect store several times, also rebooted the watch etc, but no joy. Going to IQ Apps, does not show TS on my watch. Other IQ Apps I install show up just fine.

    Any suggestions