Colmi smart rings
A while ago, I looked around for smart rings and their data privacy levels, and in terms of “data sovereignty”. Quickly, I found discussions about the Colmi R02 smart ring and compatible models. They cost between 20-80 EUR shipped, depending on model, shop, and shipping and custom fees. During an internal discussion I mentioned what I was doing and, to my surprise, was offered a Colmi R10 by a person close to me. That person had ordered one some weeks ago, but it did not fit. Few days later I had “my ring” ๐, free of charge…
The Colmi R02 family of smart rings all have similar capabilities. They measure heart rate, SpO2 (blood oxygen), stress level, steps taken, sleep lengths and phases, heart rate variability (HRV). Some models can also take body temperature, or have a small display on the ring. And of course you can get device information like model number, firmware release, and battery status.
Personally, I was not too interested in tracking myself and my “health & activity status”, but in operating a smart device without being tracked, and what kind of data and in which quality is available. Moreover, could a device be operated without the vendor app, making it an “independent” and more “sustainable” device?
Gadgetbridge
The smart rings are supported by an official iOS and Android app named QRing App. An advantage of the Colmi smart rings is that you don’t need to use the official ring to get to your data, not even for registration. Other devices require the official app to register the device, extract some authentication data / tokens. The open source Android app Gadgetbridge supports the Colmi smart rings with most features, firmware updates cannot be performed yet.
As you can see below, I could connect my R10 ring with my phone and synchronize the data.

After the data is downloaded to the phone, Gadgetbridge offers a dashboard with several diagrams, data points, etc. Here is a screenshot with information about steps taken.

Everything works as it should. Could I have stopped here? Yes, but I wanted to get close to “my data”.
Python-based CLI tool
Having a smartphone app to sync my data out of the ring is ok, it works. However, I wanted to have even more control. When looking for smart rings, I noticed that there are quite many Colmi R02-related GitHub repositories available, including the following with (partial) documentation on the synchronisation protocol, firmware, and more:
- https://github.com/tahnok/colmi_r02_client/
- https://github.com/atc1441/ATC_RF03_Ring/
- https://github.com/jonas-werner/ring-health-tracker/
- https://github.com/ryan-huang1/r02-python only seen
- https://github.com/lachlanmcalpine/colmi-ring
- https://github.com/audrebytes/colmi
Moreover, there is the Gadgetbridge source code on Codeberg with Yawell/Colmi ring support deep down.
I used that as foundation for my own Python-based CLI tool to manage the smart ring, export data from the device into a relational database with SQL capabilities (IBM Db2, SQLite). I can scan for the ring, retrieve and set settings, sychronize data, and some more. The following sections briefly show what is possible.
Colmi tool overview
>>> colmi --help
Usage: colmi [OPTIONS] COMMAND [ARGS]...
Colmi smart ring CLI โ sync, configure, and analyse your ring data.
Options:
--address MAC_OR_UUID BLE MAC address (Linux) or UUID (macOS) of the Colmi
ring.
--db-url TEXT SQLAlchemy database URL for storing synced data.
--help Show this message and exit.
Commands:
db Database management commands.
device Read device information and battery status.
export Export health data from the local database to CSV or JSON.
scan Scan for nearby Colmi rings and list them.
settings Read and write ring settings.
sync Sync health data from the ring to the local database.
Scan for smart ring and retrieve device information
Using the tool, I can scan for available rings via Bluetooth on my Linux machine. The found MAC address is persisted to easily communicate further.
>>> colmi scan --timeout 30
Colmi Rings Found
โโโโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโณโโโโโโโ
โ Name โ Address โ RSSI โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ COLMI R10_BC04 โ AA:BB:41:34:BC:AA โ -87 โ
โโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโดโโโโโโโ
Saved address: AA:BB:41:34:BC:AA
Based on the stored MAC address or by providing it as parameter, I can retrieve information about the smart ring, its firmware and hardware release.
>>> colmi device info
Device Information
โโโโโโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโโโโโโโ
โ Field โ Value โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ Address โ AA:BB:41:34:BC:AA โ
โ Firmware โ RY03CR_1.00.06_241212 โ
โ Hardware โ RY03CR_V1.0 โ
โ Manufacturer โ COLMI R10_BC04 โ
โโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโ
Synchronize smart ring data
To export data from the Colmi smart ring and store it in the configured database, I can simply run sync or specify one or more domains.
>>> colmi sync
Sync Summary
โโโโโโโโโโโโณโโโโโโโโโโโโโโโโโโณโโโโโโโโโ
โ Domain โ Records Written โ Status โ
โกโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฉ
โ activity โ 27 โ ok โ
โ hr โ 215 โ ok โ
โ stress โ 28 โ ok โ
โ spo2 โ 23 โ ok โ
โ sleep โ 2 โ ok โ
โ hrv โ 36 โ ok โ
โ temp โ 0 โ ok โ
โโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโดโโโโโโโโโ
Some SQL-based analytics
With the data exported to a database, I can easily run SQL-based analytics, simple or more advanced. The following is the SQL statement to sum up the step / activity records for a specific day - here matching the above screenshot of Gadgetbridge.
>>> select sum(steps), strftime('%F', recorded_at) d from activity_samples where d='2026-08-16' group by d;
10956|2026-08-16
To get deeper into activity details, I can run the following SQL statement for the same day. It seems that I walked in the morning (5275 steps) and in the evening (2914 steps).
>>> select recorded_at, steps, calories_kcal, distance_m, strftime('%F', recorded_at) d from activity_samples where d='2026-08-16' order by recorded_at asc;
2026-08-16 06:00:00+00:00|139|842|93|2026-08-16
2026-08-16 07:00:00+00:00|36|242|26|2026-08-16
2026-08-16 08:00:00+00:00|176|1084|120|2026-08-16
2026-08-16 09:00:00+00:00|173|1175|130|2026-08-16
2026-08-16 10:00:00+00:00|5275|34647|3838|2026-08-16
2026-08-16 11:00:00+00:00|184|1133|126|2026-08-16
2026-08-16 12:00:00+00:00|40|273|30|2026-08-16
2026-08-16 13:00:00+00:00|95|630|70|2026-08-16
2026-08-16 15:00:00+00:00|507|3145|348|2026-08-16
2026-08-16 16:00:00+00:00|277|1868|207|2026-08-16
2026-08-16 17:00:00+00:00|607|4067|450|2026-08-16
2026-08-16 18:00:00+00:00|2914|20825|2308|2026-08-16
2026-08-16 19:00:00+00:00|299|1982|219|2026-08-16
2026-08-16 21:00:00+00:00|73|416|46|2026-08-16
2026-08-16 22:00:00+00:00|161|996|110|2026-08-16
Conclusions
Health and fitness data is very personal and should not be stored in some vendor clouds. Therefore, I looked for smart rings that could be “operated” locally, ideally synchronizing to a relational database. I found a family of rings with the “Colmi R02”. Because it is quite-well researched, it was possible to code up a tool to export the data into a database and perform SQL-based analysis. And I had some fun… ๐
If you have feedback, suggestions, or questions about this post, please reach out to me on Mastodon (@data_henrik@mastodon.social) or LinkedIn.