Announcing Fitbit OS SDK 6.0
chevron down

Announcing Fitbit OS SDK 6.0

Fitbit OS SDK 6.0

Fitbit OS firmware version 5.2 has recently been released for Fitbit Sense and Fitbit Versa 3 and today we're announcing Fitbit OS SDK 6.0.

Fitbit OS SDK 6.0 features a new API, a weekly goal for Active Zone Minutes (AZM) and it aligns our mobile companion APIs by filling a few small gaps on iOS. If that wasn't enough we've also added Norwegian language support, and introduced a couple of breaking changes for good measure!

Note: This is the first time the SDK version number hasn't aligned perfectly with the firmware version, but this was necessary due to some breaking API changes that required a version bump for the SDK.

In a break from our usual deprecation strategy we have chosen to also maintain a version of SDK 4.x so developers can continue to build apps and clocks for our legacy smartwatches. Please be aware that later this year we will be ending support for SDK 4.x in our device simulator and Fitbit Studio. Developers should prepare for this by ensuring they are familiar with our Command Line SDK which can continue to be used for SDK 4.x with physical devices.

Companion Weather API

The current temperature and weather conditions are some of the most highly engaging features of popular clocks. Developers previously needed to implement this through 3rd party APIs and often at their own expense.

The new Companion Weather API allows developers to fetch the current weather conditions for the user's current location without the complexity or cost of 3rd party services. The data includes: temperature, unit (celsius/fahrenheit), condition, the UTC date updated, location name, and UTC time offset for the location.

import { me as companion } from "companion";
import weather from "weather";

if (companion.permissions.granted("access_location")) {
   weather
     .getWeatherData()
     .then(data => {
       if (data.locations.length > 0) {
         const temp = Math.floor(data.locations[0].currentWeather.temperature);
         const cond = data.locations[0].currentWeather.weatherCondition;
         const loc = data.locations[0].name;
         const unit = data.temperatureUnit;
         console.log(`It's ${temp}\u00B0 ${unit} and ${cond}
 in ${loc}`);
       }
     })
     .catch(ex => {
       console.error(ex);
     });
}

Note: Developers should always check for the appropriate permissions. If the location or background location permissions are not granted to the Fitbit mobile app the weather data will not be available.

See It In Action

To see a full example of using the new Companion Weather API in Fitbit OS SDK 6.0, please check out our open source SDK-Weather-Clock project on Github.

Bonus Update

As a special bonus for all SDK 4.x developers out there, we were able to make the new Companion Weather API available since this is a mobile only API and didn't require any firmware changes.

If you're using Fitbit Studio you just need to select SDK 4.3 in the package.json settings, or for the command line tools, change the @fitbit/sdk version to ~4.3, then install with npm install or yarn install.

AZM Weekly Goal

We originally enhanced our User Activity API with Active Zone Minutes back when we announced SDK 4.2. Today we've updated it to include the user's Weekly goal in addition to the existing Daily goal.

Developers can now read the user AZM goal value in minutes, and the current progress towards the weekly goal in minutes. An event is also emitted when the user reaches their weekly goal.

import { weekGoals, week } from "user-activity";

console.log(`${weekGoals.activeZoneMinutes} mins weekly AZM goal`);
console.log(`${week.adjusted.activeZoneMinutes}`);
weekGoals.addEventListener("reachgoal", (evt) => {
   // AZM Weekly Goal has been met
});

Norwegian Language Support

Fitbit OS 5.2 added language support for Norwegian (nb-NO) and developers can now utilise it within their apps and clocks.

Adding support for Norwegian is as simple as adding translations in an additional nb-NO.po file within your i18n folders.

Read our localization guide for full details.

Companion API Enhancements (iOS)

To bring the iOS Companion APIs in alignment with Android, we added support for the Base64 encoding/decoding functions atob() and btoa().

We also fixed an iOS specific issue when using URLSearchParams with FormData.

Breaking Changes

There are 2 breaking changes that developers will need to be aware of when updating their projects to SDK 6.0.

1. Batched Sensor Readings

All sensors now use Uint32Array for timestamps within batched readings, not Float32Array. Please check your code carefully if you're working directly with any of the sensors such as: Accelerometer, Barometer, Gyroscope, Heart Rate, and Orientation.

2. Importing Modules

Due to a change in rollup.js (the bundler we use for packaging our JavaScript files), any module that doesn't contain a default export will need to be imported using a slightly different syntax.

e.g. import * as module from "module";

This change applies to the following APIs: crypto, document, fs, jpeg, power, scientific, scientific/signal, system, user-activity, and user-settings.

Project Upgrade Instructions

In order to use the new SDK version 6.0 you need to take the following steps:

1. Set the SDK Version

If you're using Fitbit Studio you just need to select SDK 6.0 in the package.json settings, then follow the additional steps below.

For the command line tools, change the @fitbit/sdk version to ~6.0.0, and ensure you're using the @fitbit/sdk-cli ^1.7.3, then install with npm install or yarn install.

2. Fix Broken Imports

As mentioned previously, there are some breaking changes due to changes in the underlying bundling tool for JavaScript.

Change the import syntax if you're importing any of the following modules: crypto, document, fs, jpeg, power, scientific, scientific/signal, system, user-activity, user-settings.

Old syntax:

import document from "document";

New syntax:

import * as document from "document";

3. Batched Sensors

If you're using raw sensor readings in batch mode, you need to check your code as we changed from Float32Array to Uint32Array.

Until Next Time

We can't wait to see more weather and AZM clocks in the gallery!

Follow @fitbitdev on Twitter, and join our Fitbit Community Forum to keep in touch. Curious to see the amazing work Fitbit Developers have done so far? Keep tabs on #Made4Fitbit on Twitter.