Highlights
Counting steps and energy
We have updated the summaries for step count and energy (kcal). The data in the data_point_series table now includes a new is_daily_total column. This is because data providers supply data at varying levels of granularity. Previously, an error occurred during aggregation when some providers sent a daily entry alongside granular entries (e.g. Garmin in 15-minute chunks). From now on, these will be correctly flagged via the new column. The current logic for displaying totals in summaries means that the daily record will be used first. Only if this does not exist will all other entries from that day be summed.
Warning
The next time Open Wearables is launched, an automated script will set the value to true in a new column for the relevant rows in the data points. Intraday aggregates are not flagged as false by the script, so as not to place too much load on the application at start-up (although all new records will be). Therefore, the value none in the is_daily_total column should be treated as equivalent to false.
Active minutes
From now on, active_minutes will be treated as a separate series type and retrieved directly from all providers that supply this data. Until now, we have defined active minutes as the number of minutes in which more than 30 steps were recorded. This definition will remain the fallback for providers who do not supply this data. Our science team is developing a new, improved method for calculating this parameter, which will be implemented in the near future.
Warning
This change will not affect any data that has already been saved to the database. To retrieve correct active minutes for this data, you will need to resynchronise it. With Garmin, you must first delete the data, whereas with other providers, it will be overwritten during historical synchronisation.
Tip
Providers that directly support active minutes include: Garmin, Oura, Polar and Ultrahuman.
Filter sleep sessions by priority
Important
One API endpoint (/users/{user_id}/events/sleep) has been updated. However, this is a backwards-compatible change as a new parameter has been added that is set by default to not alter the existing behaviour of the endpoint.
We have added an optional filter_by_priority flag to the /events/sleep endpoint. This flag is disabled by default and, when enabled, filters out duplicate sleep sessions. On our frontend, this option is available as a toggle, as shown in the screenshot below. The screenshot illustrates a situation in which Oura connects to both Apple Health and Open Wearables, meaning sleep sessions are sent to the database directly from Oura and via Apple Health.
Garmin's respiratory rate
We have corrected the way this parameter is retrieved. Until now, we had been searching for it in raw payloads under the wrong name, meaning it was not being saved to the database.
Improved data summary per user
We have enhanced the visual design of the data summary section and added time filters, enabling you to filter your data summaries by day or by a specified time period.
Manual invitation links
Thanks to our contributor, we can now manually copy invitation links, which is useful if you don't have an email account configured.
connection.revoked outgoing webhook
A new event is now available in outgoing webhooks, which will notify you when connections with providers are revoked.
What's Changed
Data integrity
- fix(backend): take daily data OR sum intraday data by @KaliszS in #1232
- fix(backend): active minutes as a new series type by @KaliszS in #1242
- fix: correctly filter sleep sessions by priority on frontend by @czajkub in #1249
Oura
Apple Health
Garmin
Other Improvements
- fix: Mark connection as revoked on failed token refresh + connection.revoked outgoing webhook by @czajkub in #1203
- fix(backend): split iOS & Android coverage by @KaliszS in #1233
- feat: support manual invite links when email is not configured by @edsammy in #1230
- fix(frontend): optimise activity tab by @KaliszS in #1245
- refactor(frontend): improve data summary per user by @KaliszS in #1246
Docs & chores
- chore: update backend dependencies by @KaliszS in #1221
- chore: disallow indexing of docs Next.js and Vercel internal paths by @psobusiak in #1224
- docs: update Strava integration docs to reflect API terms changes by @bartmichalak in #1234
- docs: update resilience score by @anjazych in #1115
- chore: update Open Wearables version to 0.6.2 by @KaliszS in #1247
New Contributors
Full Changelog: 0.6.1...0.6.2