Skip to content

Long term Statistics

Michal Zaniewicz edited this page Jul 14, 2026 · 2 revisions

Beyond the live sensors, the integration imports long-term statistics under the suunto_app: namespace. These exist specifically to solve a problem a normal sensor can't: retroactive backfill. A sensor only records the value present at poll time; if your watch syncs to the app hours (or days) late, those past hours would be lost. Statistics are imported with their real timestamps, so a late sync fills the missed hours retroactively, giving a gap-free curve.

These are external statistics, not entities. They will not appear in your entity list, won't add to the sensor count, and are viewed in a Statistics Graph card (or ApexCharts) - see Dashboard Examples.


Why statistics (and not just sensors)?

  • The dense workout heart-rate samples aren't in the live 24/7 stream, and they are backdated + sub-hourly. HA's only supported way to ingest backdated data is hourly statistics.
  • A delayed watch→app sync means data arrives late. The import re-runs over a rolling ~5-day window each history cycle, so late hours are filled idempotently. (Data older than the window won't backfill.)

The statistics

Hourly (one bucket per hour)

Statistic ID Type Unit Source
suunto_app:hr mean / min / max bpm 24/7 stream (~10 min) + dense workout HR (~25 s) folded in, so workout peaks show.
suunto_app:steps sum steps 24/7 only (workout totals already live in the 24/7 stream - adding them would double-count).
suunto_app:energy sum kcal 24/7 only.
suunto_app:recovery_balance mean % Recovery stream (~30 min).
suunto_app:stress mean - Recovery stream.

Daily (one point per night/day)

Statistic ID Unit From
suunto_app:sleep_duration h sleep series
suunto_app:sleep_hrv ms sleep series
suunto_app:sleep_rhr bpm sleep series
suunto_app:sleep_quality % sleep series
suunto_app:sleep_spo2 % sleep series
suunto_app:readiness - (0-100) Derived Metrics
suunto_app:fitness_ctl - training-load model
suunto_app:fatigue_atl - training-load model
suunto_app:form_tsb - training-load model

The daily metrics come from data already fetched (60-day sleep series, 90-day workouts), so a late-synced night or day fills in retroactively too. The CTL/ATL/TSB trend emits the recent ~60 days (stable past the seeded ramp).


Viewing them

Add a Statistics Graph card (Dashboard → + Add Card → Statistics Graph) and pick the suunto_app:* ids. The HR statistic is the way to see a gap-free intraday HR curve with workout peaks - the live current_hr sensor cannot be filled backwards.

Minimal example (full set in Dashboard Examples):

type: statistics-graph
title: Heart rate (intraday)
chart_type: line
period: hour
stat_types:
  - mean
  - min
  - max
entities:
  - suunto_app:hr
type: statistics-graph
title: Fitness / Fatigue / Form
chart_type: line
period: day
stat_types:
  - mean
entities:
  - suunto_app:fitness_ctl
  - suunto_app:fatigue_atl
  - suunto_app:form_tsb

You can also inspect/clean them in Developer Tools → Statistics.


Notes & limits

  • Backfill window ~ 5 days. A sync delayed beyond that won't fill the part older than the window.
  • The import runs in the history coordinator (hourly cadence is plenty) and is wrapped so an import hiccup never blanks the normal sensor update - but a genuine auth failure still triggers reauth.
  • Requires the Recorder integration (declared as an after_dependencies).

Clone this wiki locally