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
    • withManishW

      2.53.42 Race S and Pathetic battery life

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      16
      1 Votes
      16 Posts
      682 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.
    • M

      Training Peaks - interval notification

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      18
      1 Votes
      18 Posts
      738 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
    • Dimitrios KanellopoulosD

      Crash reports collection Q1 2026

      Watching Ignoring Scheduled Pinned Locked Moved Watches
      18
      9 Votes
      18 Posts
      2k Views
      OutdoorManO
      R2 booted up after I woke up and pressed a button. For some reason it stopped recording sleep at 2:30 in the night and turned itself off or crashed, I am not sure.
    • withManishW

      Offline Map Download Speed

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      11
      0 Votes
      11 Posts
      298 Views
      withManishW
      @maszop sometimes you realise at the moment to download maps and … Yeah, otherwise this is just a discussion.
    • sky-runnerS

      Race S: Extremely high battery use rate

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      66
      5 Votes
      66 Posts
      6k 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.
    • S

      [Question] No stupid questions - ask anything here

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Plus Development
      144
      4 Votes
      144 Posts
      16k 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
    • L

      Delete a map on the watch

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      8
      1
      0 Votes
      8 Posts
      276 Views
      L
      @JungleJim @sartoric @2b2bff You’re all right !!! update the maps and got the remove button many thanks
    • 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…
    • OutdoorManO

      Sticky notifications during activities

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      6
      1 Votes
      6 Posts
      290 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.
    • gliuk88G

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

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race S
      6
      1 Votes
      6 Posts
      437 Views
      Sebastiano CaramuscioS
      @Egika no. Il primo anno e sino a un mese fa era perfetto anche in bici, in estate in inverno e col vento.
    • Hector ArribaH

      Vector Classic watch face gone?

      Watching Ignoring Scheduled Pinned Locked Moved SuuntoPlus™ WatchFaces
      4
      0 Votes
      4 Posts
      269 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.
    • 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
      143 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…
    • 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
      231 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.
    • Dimitrios KanellopoulosD

      What sport mode is missing from our watches in your opinion?

      Watching Ignoring Scheduled Pinned Locked Moved Watches
      271
      4 Votes
      271 Posts
      74k Views
      V
      @SuperFlo75 Try Nordicwalking
    • Danny polegD

      Freediving data screen fix!!!!!!

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Ocean
      2
      1 Votes
      2 Posts
      71 Views
      marbjoM
      @Danny-poleg Totally agree. It has been highlighted a few times in other posts aswell.
    • perfekt_tallP

      When, when...

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Run
      2
      -3 Votes
      2 Posts
      103 Views
      EgikaE
      @perfekt_tall who is “we”?
    • S

      Trash can as POI? Why?

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Vertical 2
      2
      1
      0 Votes
      2 Posts
      115 Views
      EgikaE
      @Sascha-Domres there is a selection of public POIs in the maps. Inside cities maybe the use is limited. The focus of Suunto watches is on outdoor navigation. The POIs currently cannot yet be hidden. Regarding the black grid: have you tried a soft reset of the watch?
    • M

      Race 2 - buy or not?

      Watching Ignoring Scheduled Pinned Locked Moved Suunto Race 2
      6
      0 Votes
      6 Posts
      665 Views
      L
      @Montrod haven’t really noticed an issue . Seems like a few folks here have reported it but for me it seems pretty accurate.
    • peegeeP

      Italian map region for Cortina D’Ampezzo

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