Skip to content

[iOS][Oura] Live Console shows WHOOP pairing state and WHOOP battery while Oura Ring 5 is active #2075

Open

Description

@rafaelphh

NOOP version

11.5.0

Platform

macOS

OS version

iOS 27.0 (24A435)

WHOOP strap model

WHOOP 5.0

Where the data is coming from

Oura import

Test Centre profile

Not a test-mode bug

What happens

When Oura Ring 5 is selected as the active device, the Live Console shows a partially paired / WHOOP-style connection state and appears to use WHOOP battery state instead of the active Oura battery.

The Live Console shows:

  • Device: Oura Ring 5
  • Status: “Live HR (not fully paired)”
  • Battery: 72%

However, the Oura connection itself is successfully authenticated and streaming.

The log shows:

  • Oura notifications enabled
  • Oura auth OK
  • Oura live-HR enabled
  • Oura ring WORN
  • Oura history caught up
  • Oura skin temperature decoded
  • Oura live HR / IBI streaming

The strongest indication of a wrong-device state leak is the battery value:

Oura reports:
Oura: battery 93%

WHOOP reports:
SUPERVISOR: SOC report: 72.40

But the Live Console displays:
Oura Ring 5 — Battery 72%

So the UI appears to be displaying WHOOP/shared strap battery state while Oura Ring 5 is the active device.

The app also attempts WHOOP-only commands while Oura is active, for example:

send(R10/R11 Realtime (raw stream)) ignored — command characteristic unavailable
send(Toggle Realtime HR) ignored — command characteristic unavailable
refreshBattery ignored — not connected
send(Run Haptics Pattern) ignored — command characteristic unavailable

Meanwhile the registry correctly reports:

WHOOP is no longer the active device — not scanning or connecting until it is again (#1881)
Active device oura-… is not a WHOOP — leaving sample attribution on my-whoop (#1881)

This appears to be an iOS device-state / UI-routing issue rather than an Oura authentication failure.

What you expected instead

When Oura Ring 5 is the active device, the Live Console should use Oura-specific connection and battery state.

Expected behavior:

  • Oura should be shown as fully authenticated/connected after auth succeeds.
  • The “Live HR / not fully paired” WHOOP-style state should not appear for an authenticated Oura ring.
  • The battery value should come from the Oura battery response.
  • WHOOP-only connection state or battery state should not appear in the Oura Live Console.
  • WHOOP-only controls should not be routed to the active Oura device.

Steps to reproduce

  1. Have both a WHOOP 5.0 and an Oura Ring 5 registered in NOOP.
  2. Select Oura Ring 5 as the active device.
  3. Allow NOOP to connect and authenticate with the Oura ring.
  4. Confirm in the log that Oura reports “auth OK” and “live-HR enabled”.
  5. Open the Live Console.
  6. Observe that the device is correctly labeled Oura Ring 5.
  7. Observe that the status says “Live HR (not fully paired)”.
  8. Observe the battery value shown in the Live Console.
  9. Compare it with the log:
    • Oura battery: 93%
    • WHOOP SOC: 72.40%
    • Live Console displays: 72%

noop-connection-iOS-v11.5.0-260910-1954.zip

Strap log


Before you submit

  • I attached my exported NOOP .zip (not a screenshot of the Live screen). If my bug is a clearly reproducible UI issue I described exactly how to see it instead.
  • I attached or pasted a strap log above — or my bug is a clearly reproducible UI issue that doesn't need one (e.g. a typo, a button that does nothing) and I've described exactly how to see it.
  • I checked the Troubleshooting guide — especially "history syncs but no data" (most often the strap isn't banking history to flash; charge it to 100% and reconnect).
  • I checked the FAQ and — if I'm on a WHOOP 5.0 / MG — the 5.0/MG status page, and this isn't an already-known limit (e.g. SpO₂, or recovery/sleep on the 5/MG).
  • I've left out anything personal (strap serial, account email, raw export).

Activity

  1. ryanbr commented on Sep 11, 2026

    @ryanbr
    Owner

    Thanks @rafaelphh, this was a good report and the battery comparison is what made it quick to localise. Ring 93, strap 72.40, console drawing 72 pinned it to the readout rather than to the Oura connection, exactly as you said.

    Both halves were real and they had one cause. LiveState is a single object every live source writes into, so "is this field populated" is not the same question as "does this field describe the device on screen", and nothing in the console asked the second.

    The pill was a precedence bug rather than a missing case. Its ring branch already existed, but activeConnection is pure WHOOP state and is tested first, so a bonded strap made the ring branch unreachable. It is now gated on the active device actually being a WHOOP, which also settles your last point: the bond-only controls (buzz, alarm, HRV snapshot) all key off the same flag, so they stop being live while a ring is active.

    The battery was missing plumbing. The ring's charge was decoded and held in the Oura source but never published, so the console had nothing but the WHOOP field to draw. It now publishes beside the wear state, and a non-WHOOP active device never falls back to the strap's number: an em dash means "not reported", where the strap's charge under the ring's name is a confident lie.

    Two things your report led to beyond what you filed. The same leak reached the Devices list and the home-screen widget, on both platforms, so those are covered too. And it was never Apple-only: Android had the identical ordering.

    PR #2076 has landed and it is in testing build 485. Your form said macOS while the OS line said iOS 27, which made no difference here since that console is shared, but worth knowing for the next one.

  2. pipiche38 commented on Sep 11, 2026

    @pipiche38

    @rafaelphh I'm glag to find an Oura user, and even better you have an Gen5 ring.
    if @ryanbr does agree and if you accept , I would appreciate to have your support to send me time to time some NOOP logs for investigations and to fine tune the Oura plumbing in the best way

  3. rafaelphh commented on Sep 11, 2026

    @rafaelphh
    Author

    @pipiche38 I’m very interested in helping make Oura support work as well as possible in NOOP. My Oura Ring has never been connected to the official Oura app, so it may be a useful test case for fully local/offline behavior.

    I’ve also noticed that NOOP tries to read some Ring features that remain OFF from factory/default state, and from the reverse-engineering work around Oura it appears some of those features can be enabled through feature-mode commands rather than being permanently unavailable. That may be worth investigating further for local-only rings.

    You have my full attention for any logs, traces, tests, or diagnostics you need. Just tag me and tell me exactly what to capture or try, and I’ll send it.

  4. pipiche38 commented on Sep 11, 2026

    @pipiche38

    @rafaelphh are you on discord ?

  5. rafaelphh commented on Sep 11, 2026

    @rafaelphh
    Author
  6. pipiche38 commented on Sep 14, 2026

    @pipiche38

    @rafaelphh this should be fixed with NOOP 11.6.0 and above.
    Kindly confirm and close if that is confirmed

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions