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:
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:
- 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.
- 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
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, factoryResetBLE services
The R100 exposes the following services:
PulseLoop successfully discovers all four services. The diagnostics show notifications being enabled on:
and writes being performed through:
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:
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_measurementandsleep_timelineframes during synchronization.The ring also returns its firmware revision over the same protocol:
MOY-R2E3-2.2.1This is visible in multiple synchronisation sessions.
Problems
There are two main limitations I've noticed:
The diagnostic metadata explicitly reports both:
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.
Interestingly, the diagnostic capability list explicitly reports:
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:
fdda1007020e03fdda1007020e04fdda1007020e06which PulseLoop currently reports as unknown.
There are also corresponding
sleep_timelineframes around these responses.The application is successfully exchanging commands such as:
fdda1008020f0001fdda100802110001fdda100802100001and receiving historical/timing data in response.
There are also several other commands being sent during initialization/synchronization, including:
fdda10060206fdda10060207fdda10060208fdda10060215fdda10060225fdda1006022dfdda10060303...
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:
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