colmi — screenshot of tahnok.github.io

colmi

I built `colmi_r02_client`, an open-source Python library and client, to interact with and read data from Colmi R02 series smart rings. It's 100% offline and provides direct access to sensor data without proprietary apps.

Visit tahnok.github.io →

Questions & Answers

What is `colmi_r02_client`?
`colmi_r02_client` is an open-source Python library and command-line client designed to interact with and extract data from Colmi R02, R06, and R10 smart rings. It allows users to read sensor data like heart rate, blood oxygen, and step logs directly from the device. The client operates entirely offline, ensuring privacy and direct control over personal health data.
Who should use the `colmi_r02_client`?
This client is intended for developers, privacy-conscious users, and hobbyists who own a compatible Colmi R02 series smart ring and want direct programmatic access to their fitness data. It is suitable for those who prefer open-source solutions over proprietary apps for data collection and analysis.
How does `colmi_r02_client` differ from the official QRing app or other smart device clients?
`colmi_r02_client` is 100% open source and operates entirely offline, unlike proprietary applications that often require online accounts or data sharing. It provides direct, low-level access to the ring's BLE communication protocol, allowing users full control and transparency over their data without reliance on third-party cloud services.
When would someone use `colmi_r02_client`?
Users would employ `colmi_r02_client` to sync historical fitness data (steps, heart rate, SPO2, sleep) to a local SQLite database, get real-time sensor readings, or programmatically control certain ring settings like time and logging frequency. It is useful for integrating ring data into custom analytics pipelines or personal dashboards.
What is the communication protocol used by the Colmi R02 ring and `colmi_r02_client`?
The Colmi R02 ring communicates via Bluetooth Low Energy (BLE) using a GATT service that resembles the Nordic UART Service. It utilizes 16-byte packets for both sending and receiving, where the first byte is a command, the last byte is a checksum, and the middle 14 bytes contain the payload data. No binding or security keys are required for interaction.