Converter to import Suunto dive logs into Garmin Connect

I created a simple Java application to convert my old Suunto D3 dive logs for import into Garmin Connect. It's pretty limited but seems to work so I'm sharing it as open source for others to try. It might also work for converting dive logs from other Suunto computers but I didn't have anything else to test with besides the D3.

https://github.com/nradov/SdeToFit

Hopefully this can be useful for some of you. If you find a serious defect then I'll try to fix it but I can't promise any real support.

  • I went through this now and getting the same error. I have exported the sde file from Suunto DM5, so any chance that's the reason I'm getting the error? any workaround?

    Thank you in advance.

  • Hi. I'm getting the same problem.Did you ever find out a solution to the DM5 SDE files?
    thank you

  • Afraid not.  I’m not familiar with Garmin SDK and don’t have the time to look at.  I do see that one of the files on GitHub has been updated in the meantime so will perhaps need to look at it again.

  • I've found a workaround to make this work with DM5 files. Here are the steps that worked for me. Note that I have no coding or software background, just basic Windows skills. There might be better ways to handle this, but that'll need minor recoding.

    Installation:

    1. Install Java JDK version 21 from Oracle.com.
    2. Download and unzip the Garmin Flexible and Interoperable Data Transfer (FIT) SDK into the Downloads folder.
    3. Update the CLASSPATH environment variable to include fit.jar file from the SDK in the previous step.
    4. At the github link, click on CODE (right corner) and download ZIP. Unzip into Downloads folder.
    5. At the same github link, click on Releases and download the SdeToFit-1.0-SNAPSHOT.jar file. Copy that into the C:\Users\name\Downloads\FitSDKRelease_21.158.00\java folder.

    If I moved the files into a different location instead of the Downloads folder, things didn't work. So somehow the Downloads folder is where all these need to be.

    File conversion. Note that this needs to be done one dive at a time since there are manual steps involved.

    1. Export the dive from DM5 into SDE format into any folder e.g. C:\SUUNTO.
    2. Rename the .SDE to .ZIP and unzip the included 0.XML file.
    3. Edit the 0.XML (I used notepad) to do the below
      1. <DIVETIMESEC /> to be replaced by <DIVETIMESEC>2046</DIVETIMESEC>. Note:Instead of 2046, insert the actual dive time in seconds.
      2. Find and Replace All .99999 with a blank. For some reason, DM5 exports all temperature samples as float (e.g. 24.99999) where the converter seems to be expecting an integer. With this step, you lose 1 deg accuracy. But without recoding, this is inevitable.
      3. Save the XML and drop it back into the original ZIP file. Rename the .ZIP back to .SDE.
      4. Open the command prompt in administrator mode. Run the command
        1. java.exe -cp %CLASSPATH%;C:\Users\name\Downloads\FitSDKRelease_21.158.00\java\SdeToFit-1.0-SNAPSHOT.jar com.github.nradov.sdetofit.SdeToFit C:\SUUNTO\Dive_2018-05-09-1144.SDE C:\SUUNTO

    You should find the converted FIT file in the SUUNTO folder. Import into Garmin Connect as you would import any activity FIT file. Unfortunately, the FIT file is imported as a Gauge dive. So you need to make a few edits. Click Details, select "Gauge Dive" on the top left and pick "Single-gas Dive" or whatever it is. Edit the activity to update further data like surface interval, water type, gases, etc. Tissue loading details are missing. Overall not perfect, but better than nothing. I have only tested this with single-gas (air and nitrox) dives so far. But since the import happens as a Gauge dive, expect only depth and temperature profile to be imported (maybe pressure... can't say since I didn't have air integration on my SUUNTO).

  • I've found a solution albeit a bit tedious to get through all your history.

    Download SuuntoLink - keeps your Suunto watch up to date and install on your PC

    Download Suunto app onto phone from relevant app store iOS/Android and register a profile.

    You can then either connect dive computer or sync dives from DM5.  This will upload all your dives into the Suunto app.  From the Suunto app you can go into each dive and export as a FIT file and then import this into Garmin.  It's a bit manual, but works.

    In connect you need to add relevant info, doesn't seem to take all the information from the Suunto app even if it is added there.  Doesn't look like the integration to Garmin Dive works though

  • I have air integration with my Suunto and it doesn't show up in Garmin Connect when I use the import via Suuntolink process.  On further investigation the air pressure does not show up in the Suunto app either.  I'll have a go at your process and see if the air pressure data will pull through

  • Hi,

    Tried your process but still having an issue getting the execution completed, receive the following error

    [Fatal Error] :1:1: Premature end of file.
    Exception in thread "main" org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
    at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:262)
    at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
    at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122)
    at com.github.nradov.sdetofit.suunto.SuuntoXml.<init>(SuuntoXml.java:56)
    at com.github.nradov.sdetofit.suunto.SuuntoSde.<init>(SuuntoSde.java:46)
    at com.github.nradov.sdetofit.DivesSourceFactory.create(DivesSourceFactory.java:55)
    at com.github.nradov.sdetofit.SdeToFit.convert(SdeToFit.java:72)
    at com.github.nradov.sdetofit.SdeToFit.main(SdeToFit.java:68)

  • If you could upload the original SDE file and the SDE file that you are running the script on, I could see if it converts at my end. I'm guessing the file got messed up somewhere in the unzipping/zipping process.