Prerequisites
- Windows 10 version 1903 (build 19041) or later
- .NET 8.0 SDK
- A Polar H10 chest strap
- Bluetooth Low Energy (BLE) adapter
If you are not changing code and a public Research Preview release exists, use Download & Install instead of the source-build path below.
Build from source
git clone https://github.com/MesmerPrism/PolarH10.git
cd PolarH10
dotnet build PolarH10.sln
Quick start with the CLI
# Scan for nearby Polar H10 devices
dotnet run --project src/PolarH10.Cli -- scan
# Monitor a connected device
dotnet run --project src/PolarH10.Cli -- monitor --device <ADDRESS>
# Record a session to disk
dotnet run --project src/PolarH10.Cli -- record --device <ADDRESS> --out ./my-session
Quick start with the WPF app
dotnet run --project src/PolarH10.App
The WPF app provides:
- Device rail — scan nearby straps, assign aliases, and choose the current control target
- Live tab — real-time HR, RR, ECG, and ACC with a tracked-device dropdown for parallel charting
- Live tab views — raw telemetry plus coherence, HRV, and breathing-dynamics tabs for focused review
- Overlay tab — dense single-device view for the currently selected strap
- Breathing tab — ACC breathing calibration, live state, telemetry, and tuning
- Record tab — save sessions to CSV
- Diagnostics tab — raw PMD control messages for debugging
If you are working with more than one strap:
- scan until both Polar H10 units appear in the device rail
- connect each device from the left-hand control flow
- open
Tracked deviceson the Live tab - leave
Follow selected deviceenabled for normal one-device work, or disable it and tick multiple straps for parallel research tracking
Manual breathing test
Use the Breathing tab once the strap is connected and ACC is flowing.
- connect the intended H10 and confirm HR plus ACC counters are moving
- open
Breathing - press
Start calibration - breathe normally for the full calibration window
- confirm the breathing chart moves and the state changes between inhale/exhale/pause
- use
Flip inhale/exhaleif the state direction is reversed for your strap orientation
For the full operator checklist, see Breathing Workflow.
Manual coherence test
Use the Coherence window from the Live tab once HR and RR are already updating.
- connect the intended H10 and confirm heart rate plus RR intervals are moving
- open
Coherence window - confirm coherence stays unavailable during the early RR warmup
- keep the session running until the coherence state moves from unavailable to live tracking
- verify the coherence and confidence values start updating for the selected device
- optionally switch a shared telemetry plot to
CoherenceorCoherence confidence
For the full operator checklist, see Coherence Workflow.
Manual HRV test
Use the HRV tab once heart rate and RR intervals are already updating.
- connect the intended H10 and confirm heart rate plus RR intervals are moving
- open
HRV - confirm RMSSD stays unavailable during the early RR warmup
- keep the session running until the short-term RR window fills
- verify the RMSSD headline, SDNN, and pNN50 values start updating for the selected device
- optionally switch a shared telemetry plot to
HRV (RMSSD)
For the full operator checklist, see HRV Workflow.
Canonical workspace desktop build
If you want a stable repo-local executable instead of dotnet run, build the
workspace app into the canonical output that sibling tooling also uses:
powershell -ExecutionPolicy Bypass -File .\tools\app\Build-Workspace-App.ps1
.\out\workspace-app\PolarH10.App.exe
The WPF preview capture script also targets this
out\workspace-app\PolarH10.App.exe path so local automation and manual runs do
not drift to an older src\PolarH10.App\bin\... executable.
Manual breathing-dynamics test
Use the Dynamics window from the Live tab after breathing calibration is complete.
- connect the intended H10 and confirm HR plus ACC counters are moving
- open
Breathingand complete calibration until tracking is live - return to
Liveand openDynamics window - confirm interval and amplitude entropy stay unavailable during the warmup phase
- keep breathing normally until the readiness text switches from basic stats to entropy-ready
- verify the interval and amplitude entropy tiles, feature bundles, and shared telemetry plots update for the selected device
For the full operator checklist, see Breathing Dynamics Workflow.
Manual single-file app run
If Windows application-control policy blocks the normal multi-file workspace build on this machine, publish a single-file build for manual testing:
dotnet publish src/PolarH10.App/PolarH10.App.csproj `
-c Release `
-r win-x64 `
-p:PublishSingleFile=true `
-p:SelfContained=false `
-o out/app-single
Then run:
.\out\app-single\PolarH10.App.exe
Package identity for Bluetooth
Windows GATT access requires Bluetooth capabilities declared in a package manifest. For development, you can run the apps directly. For distribution, you should package with MSIX or use packaging with external location to provide the required identity.
See Microsoft's documentation on specifying device capabilities for Bluetooth and calling WinRT APIs from desktop apps.