Suunto app Forum Suunto Community Forum
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login

    [Discussion] Share your projects

    Scheduled Pinned Locked Moved Suunto Plus Development
    discussionpeer-support
    101 Posts 35 Posters 18.4k Views 36 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • DonTomGotD Offline
      DonTomGot
      last edited by DonTomGot

      First of - thanks to Suunto for opening up the possibility to enrich their marvelous watch lines with features that many users have been missing! It is always amazing to see where the combination of ingenuity and a (somewhat) open development platform takes us.

      Being a road-runner with some sort of ambition to optimize races I have been missing a race pacer that allows for freely defining pace segments. The races I have participated in (Gothenburg area, Sweden) are quite often pretty hilly and I have found that I waste energy in the wrong places and therefore needed an app that could provide some guidance. The requirements were pretty close to “RaceWarden Pacer” - but I was missing the possibility to define the distance for the various segments of the race. And. With age comes poor eyesight, so I needed BIG (and clear) numbers to control the pace.

      The logic/thinking:
      You define your pacing strategy based on the elevation profile of the race and potentially other factors - this is all done outside of the app. Example from “Göteborgsvarvet” where I decided to try Jack Daniels’ Running Formula which roughly translates to -8s/km/%-gradient (uphill) and +5s/km/%-gradient (downhill). But that is outside the app, just the background to the pacing strategy.

      2026-05-18_19-54-08.png

      The pacing strategy is pushed to the app through user defined app settings:

      Segment Distances (km or mile): 2.45 1.79 1.36 1.36 6.59 7.8
      Segment paces (min/km or min/mile): 5:18 5:03 5:37 4:55 5:12 5:14

      (Is it possible to have two input fields in app settings?)

      With the user input the total race length is calculated by summation of the Segment Distances (21,35km) - overall race target time (1:51:26) as well as target pace (general) is also calculated.

      Then comes the tricky part. What is really needed / what can be displayed to help pacing (remember: poor eyesight)? I removed heart rate as I have found it does not work (for me) during races, and landed in the following configuration:

      2026-05-30_00-06-13.png

      • Segment Target Pace: Derived from user input and displayed once a segment is recognized/completed. In essence this is a pretty static value, that only changes when a segment is completed.
      • Segment Pace: Calculated. Similar to Lap Pace but utilizes the user defined Segment Distances/Segment paces, so it’s dynamic and updates as you run.
      • Total Seconds ahead/behind Race Plan: Defined as the deviation between race plan and completed distance/time; naturally dynamic.
      • Needed Pace: Based on initial user input finishing time and total race length are calculated. This is the pace needed for the remaining part of the race to reach the target

      What would you see as missing?

      The remaining challenges:

      • I would like to have (I believe) at least some indication on heart rate - but I am not able to get the standard zone gauge to work and lack the skills to create one by myself with the canvas mysteries
      • I tested to include an additional ahead/behind indicator focusing on ahead/behind per segment - but felt that it became more confusing and the display became to crowded - could this potentially be incorporated as a gauge?
      • Compatibility - I believe maximizing fonts will be problematic for smaller watches but have not really had the energy to investigate what/how to make sure it works also for smaller displays
      • Contrast - to me it seems yellow offers the best contrast, but is it just my eyes or a more common phenomenon?

      All input welcome! (unfortunately it seems my application for the partner development has got lost in the mail, as I applied many weeks ago)

      Also - I used the app (very successfully) during a recent race!

      1 Reply Last reply Reply Quote 1
      • M Offline
        matram Bronze Member @SuuntoPartnerTeam
        last edited by

        @SuuntoPartnerTeam

        I wanted to share my work on an Aerobic Guide with short-term decoupling feedback.

        Background

        I have a long background in automotive embedded software development, though not as a software developer. Now that I am retired I enjoy coding for fun and personal use. I have no intention of becoming a Suunto partner or putting this on the app store, so if anyone wants to use any of these ideas in their own app, please feel free to do so.

        The app

        FitFileEval.jpg

        The app has three distinctive features.

        The gauge

        The gauge emphasises the current zone by enlarging its visual range and increasing the arc width. A quick glance tells you whether you are in the zone or not.

        The HR chart

        The chart is 350 pixels wide. Each pixel represents a 5-second average of HR, so you can see up to 29 minutes of history. Each time the chart fills up, 30 seconds of data scrolls off the left edge.

        The Z2 zone boundaries are overlaid on the chart, making it easy to judge whether you are outside the zone because of a hill, whether you are in a stable situation outside Z2, or whether your HR is drifting up.

        Compared to the built-in Suunto HR chart, this chart offers better resolution, does not require switching screens, and shows the zone boundaries.

        That said, after evaluating good and bad runs from FIT files, it became clear that the HR chart alone is not a reliable indicator of fatigue and decoupling — hence the next element.

        Dashboard

        Below the chart, three values are shown from left to right:

        • Current power (1-second)
        • Current efficiency — power divided by HR (1-minute average)
        • Short-term decoupling — slope of the efficiency curve (×1000)

        This was inspired by the intervals.icu decoupling metric, but aims to provide a short-term, in-run indicator rather than a post-run summary.

        The slope is computed by skipping the first five minutes, then performing a linear regression over the efficiency data. At most 20 minutes of data is used. The value cannot be directly translated to the percentage decoupling figure for a whole run, but the colour thresholds currently in use are:

        Colour Threshold Meaning
        Green above −2 Stable / recovering
        Yellow −2 to −6 Drifting — consider slowing down
        Red below −6 Uncontrolled decline — stop or walk

        To arrive at these numbers, FIT files from real runs were replayed through a Python model. To keep this post manageable, I will cover that work in a separate post.

        Łukasz SzmigielŁ 1 Reply Last reply Reply Quote 6
        • Łukasz SzmigielŁ Offline
          Łukasz Szmigiel @matram
          last edited by

          @matram neat idea! I wonder how heavy computationally and on the UI side it is. Let’s have a competition of who’s going to put the most into the S+ app without crashing the watch 😄

          S9PP 2.50.28

          M 1 Reply Last reply Reply Quote 0
          • M matram referenced this topic on
          • M Offline
            matram Bronze Member @Łukasz Szmigiel
            last edited by

            @Łukasz-Szmigiel
            For sure I would have liked to do more of this in main.js but with no method of passing an array we are stuck with doing this on the UI side. I try to stagger things on different points in time.

            My impression is that some of the limits that are in the Firmware are more due to older watch models. This was tested on a Race S, that may occasionally feel a tad sluggish. I have a new Race 2 and will test on that also.

            But I am happy to accept your challenge 😀

            Łukasz SzmigielŁ 1 Reply Last reply Reply Quote 0
            • Łukasz SzmigielŁ Offline
              Łukasz Szmigiel @matram
              last edited by

              @matram I’m not sure about the old hardware. Perhaps it’s the architecture? There’s a reason why Run got totally new firmware (v3) that’s incompatible with the current (v2). It’s still a mystery to me why I can run Constantin on my old S9PP (the first device with UI2) with navigation and notifications along ZoneSense or other heavy apps, and it doesn’t crash, but it does on Vertical 2.

              S9PP 2.50.28

              1 Reply Last reply Reply Quote 1
              • M Offline
                matram Bronze Member
                last edited by

                I have previously shared my implementation of a structured interval guide.

                Interval_recover.jpg

                As it was not possible to upload FIT files to the watch I decided to implement the setup of a structured interval run on the watch like this.

                Combined_setup.jpg

                Three different interval profiles are stored on the watch. Initial defaults are:
                2 x 12 min @ 101% of LT pace
                5 x 6 min @ 107% of LT pace
                10 x 1 min @ 113% of LT pace

                The user can change repetitions, interval duration and pace. The new settings will be saved in the profile for the next interval run.

                Speed zones are retrieved from the watch and used to set LT pace and reasonable pace for warm-up, recovery and cool-down. Recovery duration is set to match interval duration with a lower and upper limit.

                The watch did not support creating four separate SetUp screens for the UI. So one screen was used in combination with setText for the label and parameter being changed.

                To avoid problems with rounding effects in Suunto firmware, pace (seconds per kilometer) was used in main.js which was converted to speed (m/s) only when output.

                1 Reply Last reply Reply Quote 1
                • Z Offline
                  zaedan
                  last edited by

                  Hello,

                  Here is my project to manage score in badminton with new rules with 3x15 points.

                  Source file can be fin in github /seb49/suunto-badminton-3x15

                  2aea522f-5759-4ec9-86ef-b0a133820e4d-image.jpeg
                  Welcome screen

                  327c49e3-dbab-4889-8fcc-cd430094655e-image.jpeg
                  Main screen

                  d7665733-3396-4752-95af-d5dfbcf41de6-image.jpeg
                  End set screen

                  de90f610-8e09-4375-9b8e-4fda45644b47-image.jpeg
                  End match screen

                  Regards

                  1 Reply Last reply Reply Quote 0
                  • Vadim FrolovV Offline
                    Vadim Frolov @aenzed
                    last edited by

                    @aenzed Nice! I built a similar app, but without a Nightscout. Everything is local - Android app acts as a bridge, it talks to the pump and to the watch.

                    A O 2 Replies Last reply Reply Quote 0
                    • A Offline
                      aenzed @Vadim Frolov
                      last edited by

                      @Vadim-Frolov Oh that sounds a lot better than the mess I’ve been handling. How did you setup the system?

                      1 Reply Last reply Reply Quote 0
                      • O Offline
                        odivie @Vadim Frolov
                        last edited by

                        @Vadim-Frolov I have build an extension for my Karoo 3 and I am looking for a solution for my Suunto watch. Would you or @aenzed be open to share the details of your project for other T1Ds to also get their glucose levels on the watches?

                        A 1 Reply Last reply Reply Quote 0
                        • G Offline
                          guderaber
                          last edited by guderaber

                          Over the past weeks I’ve been building SuuntoPlus sports apps for my Race S, and along the way I put together a command-line toolkit that made the work a lot faster with Claude Code as it can simulate, test, and diagnose full development cycle other than real hardware tests. Everything is now public on GitHub, so I’m sharing it here in case it helps other developers, and because I’d love feedback and a few testers.


                          1. SuuntoPlus agentic dev env (the tooling)

                          www.github.com/aabbeell/suuntoplus-agentic-dev-env

                          Command-line and AI-agent tooling for building, measuring, deploying and debugging SuuntoPlus apps on a Mac without clicking through VS Code. It drives the official SuuntoPlus Editor extension (tested with 1.42.0) and its build library; it doesn’t replace them.

                          • sp-build: validates and builds an app for all displays from the terminal
                          • VS Code MCP bridge: a small extension that exposes build, deploy, simulator, screenshot and simulator log as tools, so Claude Code or any MCP client can drive the Editor
                          • watch-log: reads the connected watch’s system log (handy for spotting memory unloads and disabled apps)
                          • sp-mem: runs your app’s JavaScript in real Duktape 2.7.0 (the watch’s engine), counts allocated bytes, estimates the watch figure and counts canvas draw calls per frame
                          • safe-area: checks simulator screenshots for content clipped by the round display edge
                          • BLE capture example script for designing a Bluetooth sensor app
                          • WATCH_QUIRKS.md: things the real watch does differently from the simulator, collected the hard way
                          • A Claude Code skill for submitting an app to the store through API Zone

                          2. Suuntopo: multi-pitch climbing topos on the watch

                          www.github.com/aabbeell/suuntopo

                          Suuntopo map Suuntopo topo list Suuntopo pitch notes

                          Draw a route in the browser topo editor (topo-editor.vercel.app, source in the same repo), copy it as one line, paste it into the app’s setting in the Suunto app and sync. On the watch you step belay by belay with the buttons: the current pitch is highlighted and auto-fitted, with grade, length and pitch notes. Short presses stay native, so lap and pause still work.

                          3. VarioLink for Suunto: paragliding vario display

                          www.github.com/aabbeell/suunto-variolink

                          VarioLink classic page VarioLink GLIDE page VarioLink THERMAL map

                          Shows a Stodeus UltraBip or BlueBip Bluetooth vario on the watch: big climb rate, average climb, thermal gain, altitude and flight time, logged to the exercise. Optional beta pages add ground speed, glide ratio, wind from your circles and a map of your thermal. Tested on watch and works but still needs some finetuning on the thermalling map also some real testing during paragliding

                          4. AirTemp for Suunto: real air temperature from a Bluetooth sensor

                          www.github.com/aabbeell/suunto-airtemp

                          AirTemp live AirTemp no data AirTemp connection lost

                          AirTemp reads a small Bluetooth sensor on the outside of your pack and shows air temperature, humidity, a graph, min/max and trend. Tested with a Xiaomi LYWSD03MMC (stock firmware) on watch; SensorPush, RuuviTag and standard Environmental Sensing sensors are supported in beta but untested.

                          *Screenshots are from the simulator (Race S, 466 px) with demo

                          What I’d love help with

                          • Testers on other watches (Race, Race 2, Vertical 2) and with sensors I don’t own (BlueBip, SensorPush, RuuviTag, other ESS sensors)
                          • Feedback from climbers and pilots on what’s actually useful on the screen
                          • Anyone who has hit the same simulator vs. watch differences: corrections and additions to WATCH_QUIRKS.md are very welcome

                          Thank you for suunto devs who opened the platform, this is the main reason im using suunto watch, and i think making it easier to create robust production apps by the community would be very beneficial to the platfform.

                          Thanks, and happy building!

                          1 Reply Last reply Reply Quote 2
                          • A Offline
                            aenzed @odivie
                            last edited by

                            @odivie I’ve got everything stored locally, but I’ll take a look if I can upload everything to github. I hardcoded my nightscout key in the beginning, so I’ll need to clear any insecure points. I’ll share the page/send you a message when I’ve done that.

                            I am working from iOS though, not android, so there’s a handful of hoops I have to jump through that won’t be necessary on android.

                            1 Reply Last reply Reply Quote 0

                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                            With your input, this post could be even better 💗

                            Register Login
                            • First post
                              Last post

                            Suunto Terms | Privacy Policy