Skip to content

[Feature Request] R100 support: works ~90% using Colmi R11 profile, but SpO₂/stress need additional protocol support #58

Description

@scufitarosie

Hi,

I've been testing my R100 smart ring with PulseLoop by selecting the Colmi R11 ring profile. Surprisingly, the R100 works very well with this profile and roughly 90% of the functionality appears to work. I wanted to provide the diagnostic log because the R100 appears to use a closely related/proprietary BLE protocol, and perhaps the remaining functionality can be added with an R100-specific implementation or extensions to the existing Colmi R11 support.

Device

Ring: R100
Firmware: MOY-R2E3-2.2.1
Android device: Motorola Edge 70
Android: 16
PulseLoop: 2.7.0 (build 40)

The diagnostic reports the wearable type as CRP and identifies the device as R100. Its reported capabilities include:
heartRate, spo2, steps, battery, stress, hrv, temperature, manualHeartRate, manualSpo2, realtimeHeartRate, realtimeSteps, findDevice, factoryReset

BLE services

The R100 exposes the following services:

  • 180F Battery Service
  • 180D Heart Rate Service
  • FDDA Proprietary service
  • FDD7 Proprietary service

PulseLoop successfully discovers all four services. The diagnostics show notifications being enabled on:

  • 2A37 Heart Rate Measurement
  • FDD1
  • FDD3
  • FDD6

and writes being performed through:

  • FDD2

The connection and service discovery complete successfully with status 0.

What currently works

Using the Colmi R11 profile, I can successfully use most of the ring functionality, including:

  • Heart rate
  • Steps
  • Battery
  • Sleep
  • Historical data synchronisation
  • Other functionality exposed by the existing profile

The diagnostics show the R100 returning historical measurement data and sleep timeline data over the proprietary FDDA protocol. For example, the app is receiving history_measurement and sleep_timeline frames during synchronization.

The ring also returns its firmware revision over the same protocol:MOY-R2E3-2.2.1

This is visible in multiple synchronisation sessions.

Problems

There are two main limitations I've noticed:

  1. SpO₂
  • SpO₂ works when I trigger a manual/on-demand measurement, but it does not appear to be synchronized as historical/continuous data in the same way as the other measurements.

The diagnostic metadata explicitly reports both:

  • spo2
  • manualSpo2
    as supported capabilities, so the ring clearly advertises SpO₂ support.

I suspect the existing R11 implementation does not yet handle the R100's SpO₂-specific command/data format correctly.

  1. Stress
  • Stress does not currently work.

Interestingly, the diagnostic capability list explicitly reports:

  • stress
    along with HRV and temperature.

So this appears to be a protocol/decoder/support issue rather than the ring simply lacking the feature.

Interesting protocol observations

The R100 is clearly communicating using the FDDA proprietary protocol.

The diagnostics contain repeated frames such as:

  • fdda1007020e03
  • fdda1007020e04
  • fdda1007020e06

which PulseLoop currently reports as unknown.

There are also corresponding sleep_timeline frames around these responses.

The application is successfully exchanging commands such as:

  • fdda1008020f0001
  • fdda100802110001
  • fdda100802100001
    and receiving historical/timing data in response.

There are also several other commands being sent during initialization/synchronization, including:

  • fdda10060206
  • fdda10060207
  • fdda10060208
  • fdda10060215
  • fdda10060225
  • fdda1006022d
  • fdda10060303
    ...

followed by successful responses from the ring.

Request

Would it be possible to investigate adding native R100 support, or at least extending the existing Colmi R11 implementation to cover the R100's additional protocol/features?

In particular, I'd be very interested in seeing/testing:

  • Historical SpO₂ synchronisation
  • Stress measurements

The fact that the R100 already works so well using the R11 profile makes me think the underlying protocol is sufficiently compatible that full support may be relatively straightforward.

Thanks for the excellent work on PulseLoop!

pulseloop-diagnostics-2026-08-31T06-53-02.671003Z.json

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions