• How to get started!

    Pinned Locked
    1
    15 Votes
    1 Posts
    2k Views
    No one has replied
  • [Guide] How to get deploy working on Linux

    Pinned guide linux suuntoplus development
    5
    18
    5 Votes
    5 Posts
    950 Views
    C
    @SyncBypass Perfect, thank you!
  • [Tip] How to save/load persistent data

    Pinned tip settings variables tutorial json manifest
    8
    2 Votes
    8 Posts
    1k Views
    H
    @SuuntoPartnerTeam Thanks. Exactly what I have expected.
  • 1 Votes
    5 Posts
    1k Views
    S
    @guderaber There is no way to sync images. Also no information to share regarding limitations either, I’m afraid !
  • Examples explained

    Pinned development
    6
    2 Votes
    6 Posts
    2k Views
    SquirrelS
    @Martin-Lillepuu Exactly, and also keep the custom watchfaces (once available) for personal use without going through the bureaucratic hoops of publishing them to official store.
  • [Tip] Helpful CSS for custom layouts

    Pinned tip css development
    1
    0 Votes
    1 Posts
    346 Views
    No one has replied
  • [Inspiration] Share your app ideas

    Pinned inspiration peer-support
    49
    5 Votes
    49 Posts
    6k Views
    T
    @Horizontal_2 I’ve used waypoints that I’ve added on the route for this purpose. This only works if you have the the route so a separate app might be a good idea anyway. I might take a look at this!
  • [Discussion] Share your projects

    Pinned discussion peer-support
    95
    1 Votes
    95 Posts
    12k Views
    M
    I have previously shared my implementation of a structured interval guide. [image: 1781683549257-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. [image: 1781683569172-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 Votes
    11 Posts
    1k Views
    M
    One thing that caused my grief when working with subscribed signals (HR, pace) in main.js or in onLoad is that on the simulator signals are always available. On the watch subscribed signals seem to transition from ‘undefined’ -> ‘NaN’ -> a valid number. I ended up needing to protect any use of these signals by using isFinite(), like this. // 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; } Inserting systemEvent() was quite effective in pinpointing the point of failure once I understood how to do it. But I do not really get any error message, just something like this. [MR] messages are inserted by me, so I can see something happened after “G4a”, but not what the actual error was. #3251371 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G1 #3251372 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G2 #3251373 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G3 #3251374 26.05.2026 17:44:39 : EVT UI_FRAMEWORK : JS [MR] G4a1-not-supported #3251375 26.05.2026 17:44:39 : WRN UI_FRAMEWORK : JS I am more of a Swift or C# person used to verbose error messages and traceback. But maybe I have been spoiled.
  • [Question] No stupid questions - ask anything here

    Pinned
    150
    4 Votes
    150 Posts
    18k Views
    brechtvbB
    @SuuntoPartnerTeam Would it be possible for suunto to open a github group with example applications that compile and show some specific details. I’m mainly thinking about reading data from bluetooth devices.
  • HR Slope - is it accessible/usable in app?

    1
    0 Votes
    1 Posts
    99 Views
    No one has replied
  • 9 Votes
    4 Posts
    732 Views
    Michele SellaM
    @stereodreieck86 Hi there! I try to answer you by points: 1- My implementation use only official LDI. Proprietary control need an android or IOS phone paired to the ebike to read the data. There is a security going on on the first pairing that need to be done and there is no reverse engineering available on that. Other uses data from the can bus but it need physical access to the bus. 2- No for both at the current state 3- LDI is the easiest one to go with. Older protocol is all reverse engineered but has additional data and hardware requirements 4- I have only one gen4 and one gen5 personally tested and they work nicely 5- I can’t test but probably the only field not available is the light sensor (working on my Kiox400C). Probably not available if there isn’t a display (i suppose, not confirmed). As a bonus i can say that i’ve tested all the non documented data field on the LDI protocol and no data is transmitted. All that is documented is all that we have.
  • Deploying new version

    11
    1 Votes
    11 Posts
    897 Views
    DonTomGotD
    @rémiP Thanks. This seems problematic. Is there any reason for this behavior @suuntopartnerteam?
  • Trailing HR / moving average HR - and a question on eliminating HR spikes

    4
    0 Votes
    4 Posts
    267 Views
    DonTomGotD
    @rémiP Thanks for this - but it seems the problem was somewhere else… “shift” does indeed work - but I now instead use it in an another way/method. It seems I was recreating an array without any need to do so - leading to memory issues. Hopefully now fixed.
  • Issues RestTimer

    7
    2
    0 Votes
    7 Posts
    674 Views
    Frédéric FiandinoF
    The app is great. Would it be possible to add an infinite loop feature? For example, I set it to 15 seconds and the watch keeps looping every 15 seconds without having to manually restart it using a button.
  • 4 Votes
    6 Posts
    429 Views
    H
    GPS accuracy may be severely degraded by the rock face blocking the ‘view’ of half of the sky, therefore incline calculation may give random results.
  • Python Model using FIT files to model watch analysis and display

    1
    1
    3 Votes
    1 Posts
    160 Views
    No one has replied
  • 5 Votes
    2 Posts
    261 Views
    M
    Must correct myself a bit … MacOS 27 drops support for Intel, i.e. the OS cannot be run on Intel CPUs. It also removes the Rosetta component that provides Intel emulation on top of Apple Silicon during the installation of the new OS. BUT there is a one-year grace period, where you can manually install Rosetta. To my understanding it no longer automatically installs as it did before when needed. You have to do the installation yourself from the command line. But it does work! So now I have the Suunto Plus environment running on two machines, double the productivity And Suunto has one more year to upgrade the simulator!
  • Plus App Custom user settings

    3
    0 Votes
    3 Posts
    282 Views
    Markus HornofM
    I suddenly worked, after a few times uninstall/install the same app build. Seems like there is a problem with stale versions…
  • Debugging and troubleshooting

    2
    0 Votes
    2 Posts
    198 Views
    M
    @DonTomGot I am no JS expert myself. But some tips. The watch runs Duktape JS engine, which is only ES5.1 compliant. The simulator runs QuickJS I think. So code that will work OK in the simulator may silently fail on the watch. There is a pinned thread on the difference between simulator and watch, you can check there for advice on some of the typical stumbling blocks. For instance the missing semicolon on the return statement will work in the simulator but likely fail on the watch. I would also use “View system events” in the “Suunto watch view”. A lot of the failures are silent or not easy to decode, but you may find something. You can also insert your own systemEvent statement to “print” to the event log and get a traceback that way.

Suunto Terms | Privacy Policy