github the-momentum/open-wearables 0.6.0
0.6.0 - Women's Health & FIT files (Garmin)

6 hours ago

Highlights

Women's Health

We now support menstrual cycle tracking for Garmin wearables. The new women's health tab is only available if the user has fetched any related data. Otherwise, it is invisible.

image

Ingest workout samples (high data granularity)

We have added an option to enable second-by-second granularity for certain data from Garmin, such as heart rate, speed, cadence, power, latitude, longitude, elevation and running dynamics (which require a FIT file), as well as air temperature (also requires FIT file to be available).

Caution

This option is disabled by default. To enable it, you must set the INGEST_WORKOUT_SAMPLES environment variable to true.

Warning

According to our tests, this will increase database memory usage by approximately 170 MB per user per month.

FIT file parser and saving to S3

A parser for FIT files has been implemented. Currently, there is no option to upload these files manually; they are processed automatically via Garmin webhooks. However, the same parser will eventually support other providers.

Garmin currently extracts the following data from FIT files and saves it to the database:

  • training segments (laps, swim lengths, etc.)
  • time spent in each heart rate zone during a workout
  • time spent in each power zone during a workout
  • air temperature (INGEST_WORKOUT_SAMPLES required)
  • running vertical oscillation (INGEST_WORKOUT_SAMPLES required)
  • running vertical ratio (INGEST_WORKOUT_SAMPLES required)
  • running stride length (INGEST_WORKOUT_SAMPLES required)
  • running ground contact time (INGEST_WORKOUT_SAMPLES required)
  • running stance time balance (INGEST_WORKOUT_SAMPLES required)

Note

We have added a new environment variable called STORE_FIT_FILES, which is set to false by default. When this is set to true, raw FIT files from Garmin will be saved to a previously configured S3 bucket. See the S3 configuration guide for more information: https://openwearables.io/docs/dev-guides/raw-payload-storage

Warning

Storing raw FIT files in S3 results in an additional data usage of between a few MB and a dozen or so MB per user per month.

Many Oura bugs fixed

We have fixed several bugs relating to the Oura integration. We have added time zone offset saving to the database, supported sleep summary metrics, improved data retrieval for current day summaries and migrated HRV from SDNN to RMSSD. Existing SDNN values in the database will be migrated by an automatic script that runs when the application starts.

Added redis TLS support

To enable TLS support (rediss://), set the new environment variable REDIS_SSL to true.

The day prefix for sleep start times that began before midnight

From now on, the start time of a sleep session in the sleep section will be prefixed with the previous day’s name if it was before midnight. If a sleep session ends after midnight, it will be displayed under the following day in the admin UI (as it always has been). Please note that this is dynamic and will adjust to the user’s time zone.

image

Support for synchronising the same data across multiple accounts

We have added dedicated support for users who need to synchronise their devices with several Open Wearables accounts for testing purposes. No configuration is required to use this feature. Simply pair the relevant accounts with your wearables account and synchronise any of them. A badge will appear in each account to indicate which accounts are linked, along with the relevant sync statuses. This shows that, for a given account, the source of the currently syncing data is a linked Open Wearables account. This means that, instead of repeatedly syncing the same data - which is virtually impossible with Garmin during backfilling, for example - it will be synced once and copied to the other accounts. More information: https://openwearables.io/docs/architecture/multi-account-sync

image image image

What's Changed

Garmin FIT files & high granularity data support

  • feat(backend): add migration with new jsonb fields for workout_details by @KaliszS in #1079
  • feat(backend): add average_cadence support for Garmin by @KaliszS in #1080
  • feat(backend): Garmin workout samples by @KaliszS in #1082
  • feat(backend): FIT files parser by @KaliszS in #1096
  • fix(backend): fit map stride_length -> step_length by @KaliszS in #1097
  • feat(backend): Garmin mappings for elevation, GPS & running dynamics + optional saving FIT files to s3 by @KaliszS in #1099
  • fix(backend): stop storing Garmin average HR as heart_rate_min by @knowald in #1121
  • feat(backend): Garmin support for workout segments (laps, swim lengths etc) by @KaliszS in #1118
  • fix(backend): null workout heart_rate_min rows copied from average HR by @knowald in #1133
  • feat(backend): HR & Power Zones [Garmin] by @KaliszS in #1175

Garmin Women's Health

Oura bugs

Apple Health bugs

Suunto bugs

  • feat(integrations): emit resting_heart_rate series from sleep HRMin by @HugoHeneault in #1055

Polar bugs

  • feat(backend): map INDOOR_CYCLING, JUMP_ROPE, KICKBOXING_MARTIAL_ARTS by @kozikow in #1110

Infrastructure improvements

  • fix: mount redis volume at /data so persistence works by @knowald in #1127
  • feat(backend): support TLS (rediss://) for Redis connections by @kczpl in #1134

Other improvements

  • fix(frontend): stop activity & sleep dates shifting a day for users west of UTC by @bartmichalak and @KaliszS in #1160
  • refactor: fixed scopes db saving & improved UI by @KaliszS in #1088
  • feat: Add webhook management endpoints by @czajkub in #1049
  • fix: update last_synced_at on webhook receive by @czajkub in #1145
  • feat: sharable syncs (the same data) between different OW users by @KaliszS in #1147
  • feat(frontend): OpenWearables version visible under logout button by @KaliszS in #1165

Docs & chores

  • fix(docs): update GitHub repository links in iOS SDK documentation by @bartmichalak in #1064
  • docs: update available providers in readme by @bartmichalak in #1069
  • chore: bump the npm-minor-patch group across 1 directory with 4 updates by @dependabot[bot] in #1057
  • chore: update sentry-sdk[fastapi] requirement from >=2.59.0 to >=2.60.0 in /backend by @dependabot[bot] in #1061
  • refactor(backend): update deps (redis v8) by @KaliszS in #1087
  • chore: bump the npm-minor-patch group in /frontend with 13 updates by @dependabot[bot] in #1102
  • docs(mcp): remove formatted duration fields absent from sleep tool output by @knowald in #1122
  • docs: clarify migrations auto-run on deploy temporarily by @bartmichalak in #1129
  • docs: note developer program is on hold by @bartmichalak in #1130
  • docs: drop "| Open Wearables" suffix from page titles by @bartmichalak in #1131
  • docs: add Fitbit and Google Health Connect to the coverage matrix by @knowald in #1137
  • refactor(backend): update python dependencies by @KaliszS in #1163
  • refactor(frontend): update react dependencies by @KaliszS in #1164

New Contributors

Full Changelog: 0.5.2...0.6.0

Don't miss a new open-wearables release

NewReleases is sending notifications on new releases.