Suunto app Forum Suunto Community Forum
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login
    1. Home
    2. Popular
    Log in to post
    • All Time
    • Day
    • Week
    • Month
    • All Topics
    • New Topics
    • Watched Topics
    • Unreplied Topics

    • All categories
    • M

      Training Peaks - interval notification

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      18
      1 Votes
      18 Posts
      701 Views
      stromdiddilyS
      @2b2bff said: @stromdiddily there is no universal “This is a workout file, deal with it watch” format. If you are pushing a workout to Garmin, you define the steps. If you push the workout to Suunto, you define a SuuntoPlus Guide. I don’t know how Coros or Apple Watch does handle it. So, Training Peaks - or any other platform for that matter - has to include the respective framework for each brand individually… The other way around, if you read the finished activity from the watch, there is a format that has been widely adopted: Garmin FIT files. I see, this makes sense…thank you
    • withManishW

      2.53.42 Race S and Pathetic battery life

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      16
      1 Votes
      16 Posts
      592 Views
      E
      @withManish On iOS there is rungap for datamigration. And I use strava and intervals.icu. It collects data from multiple sources (I had different brands in the past). But most importantly, data of 5 or 10 years ago hardly has any relevance. But I’m no hardcore data collector.
    • S

      Race 2 accuracy

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      118
      0 Votes
      118 Posts
      11k Views
      S
      @dreamer_ I’m built similarly to you so glad I stuck with the Race 2. Maybe you’ll change back after the update! I didn’t want to pay an additional £100 for a torch and bigger battery, neither of which I need. This would also come with more bulk and omission of the scroll wheel which I like for zooming the maps. I wonder whether this update will be included in the next quarterly one or a separate earlier fix…
    • S

      [Question] No stupid questions - ask anything here

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Plus Development
      144
      4 Votes
      144 Posts
      15k Views
      M
      @DonTomGot This may be too complex as a first project. But let me start with giving you the overall structure of the code as that seems to be the problem at this point. Manifest.json declares what input you need from the watch firmware, what data you intend to output from main.js to t.html and settings you use in the watch. This is parts of manifest.json "in": [ { "name": "Power", "source": "/Activity/Move/-1/Power/Current", "type": "subscribe" }, { "name": "HeartRate", "source": "/Activity/Move/-1/HeartRate/Current", "type": "subscribe" }, { "name": "Speed", "source": "/Activity/Move/-1/Speed/Current", "type": "subscribe" }, { "name": "SpeedAvg", "source": "/Activity/Lap/-1/Speed/Avg", "type": "subscribe" } ], "out": [ { "name": "PaceTarget" }, { "name": "TimeRemaining" }, { "name": "Debug" } ], "template": [ { "name": "t.html" } ], "settings": [ {"shownName": "Repeat count", "path": "appSettings.repeatCount", "type": "int", "min": 1, "max": 19}, {"shownName": "Target pace for WarmUp (m/s)", "path": "appSettings.targetPaceWarm", "type": "float", "min": 1, "max": 6}, {"shownName": "Target pace for Interval (m/s)", "path": "appSettings.targetPaceInterval", "type": "float", "min": 1, "max": 6}, {"shownName": "Target pace for Recovery (m/s)", "path": "appSettings.targetPaceRecovery", "type": "float", "min": 1, "max": 6}, {"shownName": "Target pace for CoolDown (m/s)", "path": "appSettings.targetPaceCool", "type": "float", "min": 1, "max": 6}, {"shownName": "Duration for WarmUp (s)", "path": "appSettings.durationWarm", "type": "int", "min": 1, "max": 14400}, {"shownName": "Duration for Interval (s)", "path": "appSettings.durationInterval", "type": "int", "min": 1, "max": 14400}, {"shownName": "Duration for Recovery (s)", "path": "appSettings.durationRecovery", "type": "int", "min": 1, "max": 14400}, {"shownName": "Duration for CoolDown (s)", "path": "appSettings.durationCool", "type": "int", "min": 1, "max": 14400} ] The main.js contains declarations for some variables // App settings, see also manifest and data.json var settings; var isPaused; // State machine var currentState = 'WarmUp'; var currentRepition = 1; var repeatCount = 3; var timeRemainingInStep = 10; var currentPaceTarget = 2.326; // Average pace and max HR for last lap var lastLapAvgPace; var lastLapPeakHR; There is also a number methods that deal with the state machine needed for interval training. I give only their declarations and purpose for now. // Function to translate speed to a pace string var speedToPace = function(speed) // Training session State Machine // Get next step, set remaining time // And increment interval counter var setNextState = function() // Function to get target pace for current state var getTargetPace = function() // Function to set text for the top right text block var setTextBlock = function() // Update last lap data, avg pace and peak HR var updateLastLap = function(input, output) The evaluate method may be of interest. Here it comes // System starts calling this about once per second after the sports app is selected // i.e. before the exercise is actually started. // input: contains resources specified in "in" section of the manifest. // output: resources passed to the device (specified in "out" section of the manifest). function evaluate(input, output) { // If we are in an Interval step remember average pace and max HR from this step updateLastLap(input, output) // Count down time remaining in current step if (!isPaused) { timeRemainingInStep -= 1; // Handle the state transition if time remaining is zero if (timeRemainingInStep === 0) { // Trigger a silent lap // $.put('Activity/Trigger', 24); // Set the next state setNextState(); } // End of if time remaining is 0 // Output remaining time to HTML after the new durations is set // If we are done and countdown is negative display positive value output.TimeRemaining = (timeRemainingInStep < 0) ? -timeRemainingInStep : timeRemainingInStep; } // End of if not paused // Get target pace for current step getTargetPace(); // Output target to HTML output.PaceTarget = currentPaceTarget; // Update the top right text block setTextBlock(); } Settings are loaded in onLoad and defaults provided, like this // main.js loaded and system starts calling evaluate() function onLoad(input, output) { // Load app settings settings = localStorage.getObject("appSettings"); // Create default settings if none found if (settings == null) { settings = { targetPaceWarm: 2.326, targetPaceInterval: 2.857, targetPaceRecovery: 2.083, targetPaceCool: 2.083, durationWarm: 10, durationInterval: 12, durationRecovery: 5, durationCool: 20, repeatCount: 2 } } isPaused = true; } The bulk of this code deals with interval training and not the gauges, so if you are only interested in the gauges, you do not need most of the things above. In t.html the code should go inside quotes in the onLoad and onActivate methods, the beginning looks like this. <uiView onActivate = " $.subscribe('/Dev/Time/Tick10hz', function(){ control('#cnv', 'REFRESH'); }) // Subscribe to HR, pace and targets to use in drawing gauges in the canvas $.subscribe('/Activity/Move/-1/HeartRate/Current', function(v) { currentHR = parseFloat(v) * 60; }) $.subscribe('/Activity/Move/-1/Speed/Current', function(v) { currentPace = parseFloat(v); }) $.subscribe('/Zapp/{zapp_index}/Output/PaceTarget', function(v) { paceTarget = parseFloat(v); }) " onLoad=" // Subscribed values var currentHR; var currentPace; var paceTarget; // Target zones var hrZones = [0, 133, 144, 155, 165, 185]; var paceZones = [0, 2.299, 2.5, 2.703, 2.857, 5.556]; // Radius of the display in pixels var radius = 233; // Zone colors (muted, suitable as gauge backgrounds) var z1Color = '#5B8FA8'; // Zone 1 - blue var z2Color = '#6AA87A'; // Zone 2 - green var z3Color = '#C4B050'; // Zone 3 - yellow var z4Color = '#C87D45'; // Zone 4 - orange var z5Color = '#B85555'; // Zone 5 - red var zoneColors = [z1Color, z2Color, z3Color, z4Color, z5Color]; // Other colors var outColor = '#B85555'; // Out of target range (low and high sectors) var inColor = '#6AA87A'; // Target range (mid sector) var inactiveColor = '#999999' // Inactive sector var ptrColor = '#CCCCCC' // Gauge pointer var bkgColor = '#000000' // Black background // For debugging var temp1 = '-'; var temp2 = '-'; // Functions to draw gauges on canvas ---------------------------------- // Draw an arc for a gauge // from from angle in degrees // to to angle in degrees // color arc color // width width of the arc function arcSegment(ctx, from, to, color, width) { ctx.beginPath(); ctx.arc( radius, radius, // center of display radius - 2 - width / 2, // radius - leave a small margin outside arc Math.PI * from / 180, // Angles from - to in degrees converted to radians Math.PI * to / 180 ); ctx.strokeStyle = color; ctx.lineWidth = width; ctx.stroke(); } --- snip --- Apart from the code for rendering the gauge background and pointer which you already have above, you also need methods to identify the current zone to highlight. // Get the index of the the active zone for a 3 zone target gauge // value current value // targetLow low end of target range // targetHigh high end of target range function getActiveTarget(v, targetLow, targetHigh) { if (!isFinite(v)) return 0; if (v > targetHigh) { return 2; } else if (v > targetLow) { return 1; } else { return 0; } } // Get the index of the the active zone for a 5 zone HR gauge // v current value // zones an array of 4-values defining the 5 zones function getActiveZone(v, zones) { if (!isFinite(v)) return 0; for (var i = 1; i < zones.length; i++) { if (v < zones[i]) return i - 1; } return zones.length - 1; } The environment is very challenging to work in, you get very little support. Often the app just silently fails. A few tips. build up in small steps and commit frequently check thoroughly for typos and other mistakes that would be caught by other IDE in the simulator toggle on “developer tools” , that will reveal some mistakes insert systemEvent statements where you can put information in the event log
    • sky-runnerS

      Race S: Extremely high battery use rate

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      66
      5 Votes
      66 Posts
      5k Views
      A
      Hopefully they’re able to fix it soon. It feels like with every update they just introduce more problems. Currently still experiencing the auto-update bug (can’t disable it essentially), and now the battery bug has gotten even worse.
    • Dimitrios KanellopoulosD

      Crash reports collection Q1 2026

      Watching Ignoring Scheduled Pinned Locked Moved Watches
      15
      9 Votes
      15 Posts
      1k Views
      stromdiddilyS
      @sky-runner got it, didn’t realize zoom was restricted during a lock
    • L

      Delete a map on the watch

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      8
      1
      0 Votes
      8 Posts
      246 Views
      L
      @JungleJim @sartoric @2b2bff You’re all right !!! update the maps and got the remove button many thanks
    • OutdoorManO

      Sticky notifications during activities

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      6
      0 Votes
      6 Posts
      270 Views
      J
      I’ve had the same problem since the beginning. Sometimes the notification disappears immediately, sometimes after a long time, and sometimes only manually pressing the crown helps.
    • Kraisun TuntaK

      Third-party chest strap with ZoneSense on SuuntoPlus?

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      22
      0 Votes
      22 Posts
      967 Views
      G
      Scusate ma non capisco il voto negativo!!!
    • Hector ArribaH

      Vector Classic watch face gone?

      Watching Ignoring Scheduled Pinned Locked Moved SuuntoPlus™ WatchFaces
      4
      0 Votes
      4 Posts
      253 Views
      EgikaE
      @Horizontal_2 exactly. Every watch has their so called “hero” watch face. It is pre-installed with the firmware. Which makes sense, as there must be one, even if you remove all using the app. Of course this hero watch face is not in the app. It is on your watch.
    • G

      Tech diver issues with Nautic

      Watching Ignoring Scheduled Pinned Locked Moved Nautic
      8
      5 Votes
      8 Posts
      566 Views
      N
      Hi agree the app need a profound re-design regarding diving. Basic : log dives number log dives separate dives by devices, when dive with Nautic & Nautical S the dive get duplicate Tanks stats gas used PPo2 bottom time surface interval deepest dive longest dive ascend time ascend rate Total dives Total EAN dives Total Deep dives Dive plans Total time Max time Average time Max depth Average Max depth Min SAC Max SAC In my opinion should be a specific dive section inside the app only to log dives, and able to hide all the other activities metrics.
    • sky-runnerS

      [Vertical 2, 2.53.42] Map and Navigation features are greatly improved but there are still a lot of old issues and also new bugs introduced in the latest update

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      41
      12
      14 Votes
      41 Posts
      4k Views
      EzioAuditoreE
      @peegee If I understood correctly than yes same button on Vertical 2 can zoom in / zoom out. Short press zoom in long press zoom out. Same like middle button: short press advance screen long press go back (previous). Cheers!
    • Dimitrios KanellopoulosD

      Black grid issue

      Watching Ignoring Scheduled Pinned Locked Moved Watches
      40
      10 Votes
      40 Posts
      6k Views
      S
      @MikeC30 thank you… Unfortunately, the problem has existed since Vertical 1. I was hoping that Suunto had solved this by now. Soft reset as an emergency solution I just did… Thank you
    • B

      Heart Rate Drops After Starting Activity (Race S + HRM-Dual)

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      3
      0 Votes
      3 Posts
      134 Views
      2
      @bartolomeo6 I have an HRM DUAL and didn’t have any problems with it. Are you sure the belt is connected and used in the activity? The heart symbol with little “wings” on the side? If yes, sync the activity to Runalyze and look at the r-r graph at the bottom. It might give some insights…
    • gliuk88G

      Elevation gain suddenly inaccurate on flat runs (last 2 weeks)

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      5
      1 Votes
      5 Posts
      391 Views
      EgikaE
      @krad801 there is no way to set the watch for GPS altitude only. If you find such a setting in the app, it is used for activities recorded with the app directly. Otherwise with the watch on a bike, there sometimes can be wind affecting the barometric sensor. Maybe this was the case for you.
    • M

      Canvas rendering limits on the watch — findings and a tiling solution

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Plus Development
      3
      1
      3 Votes
      3 Posts
      216 Views
      Łukasz SzmigielŁ
      @matram this is golden, thanks. I’ll add it to the suuntoplus skill I’ve been working on. I’m trying to aggregate all knowledge about hardware limitations and things that docs or examples don’t cover. Perhaps I should open source it? There are plenty of quirks I’ve stumbled upon, like colors on MIP displays - for example if the color is too dark - it’ll be rendered as black. Or the issue of “back on track” that I’m fighting with currently.
    • peegeeP

      Italian map region for Cortina D’Ampezzo

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      2
      1 Votes
      2 Posts
      118 Views
      sartoricS
      @peegee you need “Veneto”
    • D

      9PP Appreciation in 2026 / Things to fix before it's orphaned

      Watching Ignoring Scheduled Pinned Locked Moved Suunto 9 Peak Pro
      37
      11 Votes
      37 Posts
      4k Views
      jthomiJ
      @MLM31 I have to say I kinda overlooked the Race S a little, but since it’s out there now quite some time, it may be better to still wait for newer models maybe at the end of year. Battery runtime with my S9PP also an issue, charged it yesterday morning before leaving the day, then 24hrs later without any usage of the watch only 24/7 HR measurement, I lost 25% of battery life. Now, with a 30 minute bike ride, and a 40 minute dog walk, I am at 45%, which really is a bummer.
    • Dimitrios KanellopoulosD

      Need followers? Introduce your self! Share your profile here

      Watching Ignoring Scheduled Pinned Locked Moved Suunto app and other software services feedback social
      149
      6 Votes
      149 Posts
      41k Views
      MLM31M
      There aren’t many women in the room! I’m Marie-Lise, a French-speaking Canadian woman from Quebec City, almost 50 years old, trying to stay in shape and maintain a bit of performance in a busy family and professional life. I’m a multisport enthusiast: snow pentathlon, ski touring, hiking, running, cycling, etc. Username: MLM
    • peegeeP

      Strap/Band color suggestion for 90th Anniversary Edition

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      17
      1 Votes
      17 Posts
      929 Views
      S
      @Stefano-M64 darn it, package got lost somewhere… still waiting