Ring Health Tracker: Open source biometrics
An open-source, self-hosted way to collect ring biometrics without vendor clouds, subscriptions, or giving your health data to third parties.
There are a lot of devices that help people monitor and track health data these days. Apple and Garmin watches, different smart rings like Oura, and plenty more. That is great in principle, but usually expensive and often tied to someone else’s cloud. I wanted a simple way to track health metrics over time without handing all of that data to a third party.
The Colmi R02 ring in action. Tiny hardware, surprisingly useful data.
The current “premium wearable” model is a bit absurd: pay about 53,000 yen (roughly $350 USD) for the hardware, then in some cases pay a recurring subscription on top, for the privilege of uploading your own biometric data to someone else’s servers.
Or, you can do this another way: a 3,500 yen (roughly $23 USD) Colmi R02 ring, a small Android app, and a self-hosted metrics stack. No subscription. No vendor account. A telemetry pipeline you fully control. Also yes, that price included a charging case, USB cable, and shipping.
A fun bonus is that you will show up as one of the devices monitored by your existing o11y stack :-) Network switch throughput, node exporter data for servers and … you!
Pretty easy choice.
Project overview
Ring Health Tracker is an open-source pipeline that pulls biometric data from a Smart Ring and stores it in your own VictoriaMetrics instance, with Grafana for visualization.
The phone app connects to the ring over BLE, fetches buffered samples (heart rate, HRV, SpO2, stress, steps, sleep, battery, etc.), and pushes them to your own backend. The ring can buffer data for a while, so it does not need to be online every second to be useful.
Android app for pairing the ring, setting the VictoriaMetrics endpoint, and manual sync.
The hardware
The Colmi R02 ring uses a BlueX RF03 SoC chip and communicates with your phone over BLE. The specific dialect of the BLE protocol the ring speaks was reverse-engineered by Aaron Christophel and others through BLE sniffing. Please refer to this GH repository for specifics on the Colmi ring in particular.
This project borrows heavily from those efforts and from the Gadetbridge initiative here.
Close-up of the R02. Not fancy, just functional.
Architecture
An Android app written in Kotlin pairs and syncs with the ring. This can be done on-demand through the app and it auto-syncs when active as well. The app can then sync the metrics it received to a VictoriaMetrics instance which stores the data permanently. The user views the data through a Grafana dashboard.
Note that I use an always-on VPN so the phone is always connected to the home network - even when I’m out and about. While that simplifies things a bit as you can run http rather than fiddling with TLS certs, it’s not strictly needed. You could just sync in the morning / evening. No need to do it constantly.
High-level flow: ring -> Android app -> VPN tunnel -> VictoriaMetrics -> Grafana.
Grafana dashboard showing incoming biometrics (heart rate, HRV, stress, SpO2, sleep, activity, battery).
So this project does one job: collect the metrics and ship them to your own time-series store. From there, you can query, graph, alert, and archive however you want.
What you get out of it
You get a practical, low-cost way to build a personal biometric history without giving up control.
If all you want is “show me my numbers over time” and “let me keep my own data,” this is enough. You do not need a luxury wearable plus subscription stack to do that.
If you want the technical deployment details, architecture, and full setup instructions, they are in the GitHub repo:
Is it accurate? Reasonably so, at least for heart rate. I compared BPM data with a proper blood pressure + BPM monitor and with an Apple Watch a friend lent me for testing. Still, this is not a medical device and definitely not a replacement for actual healthcare. It is mostly for fun, trend tracking, and technical curiosity. If you are worried about your health, talk to a doctor.