Apple Watch Ultra: Exporting Data From the Oceanic+ App [Long, Possibly Boring]

Please register or login

Welcome to ScubaBoard, the world's largest scuba diving community. Registration is not required to read the forums, but we encourage you to join. Joining has its benefits and enables you to participate in the discussions.

Benefits of registering include

  • Ability to post and comment on topics and discussions.
  • A Free photo gallery to share your dive photos with the world.
  • You can make this box go away

Joining is quick and easy. Log in or Register now!

Buadhai

Contributor
Messages
816
Reaction score
281
Location
Korat, Thailand
# of dives
None - Not Certified
AFAIK there are now two iOS apps to export data gathered by the Oceanic+ app on the Apple Watch Ultra:
Both of these apps export UDDF files which are importable by several dive logbook apps including Subsurface, MacDive and others.

AWU2UDDF grabs its data from Apple's Health (HealthKit) app. Oceanic+ doesn't share much data with HealthKit, so what you get is limited to date, time, depth and water temperature. Enough if all you need is a look at your dive profile.

Here are some fragments from a UDDF file produced by AWU2UDDF:

Code:
<dive id="2023-02-24T01:27:44Z">
        <informationbeforedive>
          <datetime>2023-02-24T08:27:44+0700</datetime>
        </informationbeforedive>

         <waypoint>
            <depth>10.981</depth>
            <divetime>167.278</divetime>
            <temperature>301.2</temperature>
          </waypoint>

Note: temperature is in degrees Kelvin.

The current version exports each dive into a separate UDDF (XML) file. The author said that a future release will allow exporting batches of dives.

Dive Converter grabs data directly from the Oceanic+ app as long as you created your Oceanic+ profile using a username and password. If you used "Sign in with Apple", then you'll need to create a username/password account and transfer your existing dives into the new account. The author has created a method to do this which is not yet in general release. I tested it and it worked just fine.

This data is quite comprehensive and detailed. Here are some fragments from the UDDF file produced by Dive Converter.

Each dive has some dive site info including, I believe, the GPS coordinates for the location of your descent. Oceanic+ names dives by date and time which you can edit to include a dive site name or, whatever:

Code:
        <site id="728496CD-6853-4214-B576-621FC56C595D">
            <name>Richelieu 24/02/23 at 15:24</name>
            <geography>
                <address>
                    <country>Thailand</country>
                </address>
                <location>Richelieu 24/02/23 at 15:24</location>
                <latitude>9.363209145686826</latitude>
                <longitude>98.02213922816198</longitude>
                <altitude>4.8339972496032715</altitude>
                <timezone>7.0</timezone>
            </geography>
        </site>

Each dive also has a pre-dive section which includes date, time, surface interval and more:

Code:
            <informationbeforedive>
                <datetime>2023-02-24T15:24:30+07:00</datetime>
                <link ref="728496CD-6853-4214-B576-621FC56C595D" />
                <internaldivenumber>641f9fef80261f3bc7120b86</internaldivenumber>
                <divenumber>9</divenumber>
                <divenumberofday>1</divenumberofday>
                <altitude>4.8339972496032715</altitude>
                <surfaceintervalbeforedive>
                    <passedtime>8820.0</passedtime>
                </surfaceintervalbeforedive>
            </informationbeforedive>

Link ref is the code for the site id

Each dive also has a post-dive section which includes logbook type entries that you made in the Oceanic+ app after the dive:

Code:
            <informationafterdive>
                <diveduration>3435.0</diveduration>
                <greatestdepth>19.808015823364258</greatestdepth>
                <lowesttemperature>301.3400005340576</lowesttemperature>
                <current>very-mild-current</current>
                <notes>
                    <para>Juvenile Sweetlips. Spiderman worm. Gobi. &#10;</para>
                </notes>
                <rating>
                    <ratingvalue>7</ratingvalue>
                </rating>
                <visibility>21.507608890533447</visibility>
                <equipmentused>
                    <link ref="B295F22B-6A88-4339-BA03-328D6A15894C" />
                </equipmentused>
            </informationafterdive>

There is also an entry for tank data for each dive

Code:
                <tankdata id="C0D40091-F15B-4A99-96C0-A753CD5B2789">
                    <tankpressurebegin>0.0</tankpressurebegin>
                    <link ref="EE38063B-95C6-43EA-8A65-89AD49B4DA48" />
                </tankdata>

I guess I forgot to enter beginning tank pressure. The link ref refers to the definition for the mix id:

Code:
        <mix id="EE38063B-95C6-43EA-8A65-89AD49B4DA48">
            <name>Air</name>
            <o2>0.21</o2>
            <n2>0.79</n2>
        </mix>

There is also "Application Data which contains information that is not part of the UDDF specs, including exit GPS location.

Code:
                <applicationdata>
                    <oceanic>
                        <minimumascentspeed>0.17822147905826569</minimumascentspeed>
                        <averageascentspeed>4.21</averageascentspeed>
                        <maximumascentspeed>13.671116828918457</maximumascentspeed>
                        <surfaceconditions>0.0</surfaceconditions>
                        <exitlongitude>97.64604777333568</exitlongitude>
                        <exitlatitude>8.56685459123547</exitlatitude>
                        <initialtimestamp>1677402216.0</initialtimestamp>
                        <timeinterval>15.0</timeinterval>
                    </oceanic>
                </applicationdata>

And, finally, there are waypoints for each 15 second interval of the dive:

Code:
                    <waypoint>
                        <depth>17.328426361083984</depth>
                        <divetime>473.0</divetime>
                        <temperature>301.4400009155273</temperature>
                        <nodecotime>4238.00537109375</nodecotime>
                        <ascentrate>-7.122725486755371</ascentrate>
                    </waypoint>
                    <waypoint>
                        <depth>17.382091522216797</depth>
                        <divetime>488.0</divetime>
                        <temperature>301.5399993896484</temperature>
                        <nodecotime>4519.25537109375</nodecotime>
                        <ascentrate>-0.5572483539581299</ascentrate>
                    </waypoint>

I'm sure I've made some mistakes here and left stuff out. Please correct what I missed.
 
The author has created a method to do this which is not yet in general release.
Looking forward to this process becoming public.

Code:
Code:
                <tankdata id="C0D40091-F15B-4A99-96C0-A753CD5B2789">
                    <tankpressurebegin>0.0</tankpressurebegin>
                    <link ref="EE38063B-95C6-43EA-8A65-89AD49B4DA48" />
                </tankdata>

Tank pressure? Nice find as I don't believe this is a datum that can be entered in the current release of the Oceanic+
 
Tank pressure? Nice find as I don't believe this is a datum that can be entered in the current release of the Oceanic+

It would be nice if this and other gear-related entries would be included with the app. This is one of the things that I always note in my paper logbook.

There are other anomalies:

In the UDDF file the dives seem to be numbered backwards. For example, on this trip the last dive was at Zodiac (Similans) at 4:03 PM on February 26th. However, in the UDDF file this is listed as the very first dive of the trip:

Code:
<informationbeforedive>
                    <datetime>2023-02-26T16:03:36+07:00</datetime>
                    <link ref="52F98157-1F02-437C-B203-1FDC87AAFC2A" />
                    <link ref="2C43C7F5-8C54-4598-A169-7B3FAB0889FA" />
                    <internaldivenumber>641f9fe004437e002dd434fd</internaldivenumber>
                    <divenumber>1</divenumber>
                    <divenumberofday>1</divenumberofday>

In a dive at Koh Bon Ridge, the entry position was logged, but not the exit position. The map in the Oceanic+ shows no location at all.

Code:
                        <latitude>8.829438499512252</latitude>
                        <longitude>97.79691514721496</longitude>
                        
                        <exitlongitude>0.0</exitlongitude>
                        <exitlatitude>0.0</exitlatitude>

IMG_3017C8EC02CC-1.jpeg
 
As the developer of AWU2UDDF, I should add one thing. The depth and temperature data that is stored in HealthKit is stored independent of the dive computer application that is running -- the Apple Watch Ultra stores the data in HealthKit in parallel with making it available via API to the application running, so it will be stored even if a dive computer or bottom timer app is not running. So it's not really specific to exporting from Oceanic+ (or any other application.)
 
As the developer of AWU2UDDF, I should add one thing. The depth and temperature data that is stored in HealthKit is stored independent of the dive computer application that is running -- the Apple Watch Ultra stores the data in HealthKit in parallel with making it available via API to the application running, so it will be stored even if a dive computer or bottom timer app is not running. So it's not really specific to exporting from Oceanic+ (or any other application.)
Thank you for clarifying that.
 
https://www.shearwater.com/products/peregrine/

Back
Top Bottom