- Un proyecto para leer localmente datos de salud y actividad del smart ring Colmi R02 de bajo costo, con el objetivo de usarlo 100% offline y sin app en la nube
- Está orientado a Colmi R02, R06 y R10, y ofrece como regla práctica que, si en la descripción del producto aparece el uso de la app QRing, probablemente sea compatible
- Ya se ha hecho ingeniería inversa de la frecuencia cardiaca en tiempo real, SPO2, registros de pasos, frecuencia cardiaca y sueño, ajuste de hora e incluso la medición de “estrés”, aunque todavía quedan partes por entender en la interpretación de los registros de pasos
- El CLI puede instalarse con
pipx y permite ejecutar escaneo BLE, mediciones en tiempo real, sincronización con SQLite, consulta de información del dispositivo, envío de comandos en crudo, reinicio y ajuste de hora
- La comunicación usa BLE GATT y una estructura de paquetes de 16 bytes, y se puede acceder sin binding ni claves de seguridad, lo que resulta conveniente, aunque la decisión sobre privacidad queda en manos del usuario
Cliente offline para smart rings de la familia Colmi R02
- colmi_r02_client es un cliente open source en Python para leer datos de los smart rings de la familia Colmi R02
- El proyecto enfatiza el uso 100% open source y 100% offline
- El Colmi R02 es un smart ring o wearable fitness de alrededor de $20 e incluye los siguientes sensores
- acelerómetro
- seguimiento de pasos
- seguimiento del sueño
- gestos
- frecuencia cardiaca (HR)
- saturación de oxígeno en sangre (SPO2)
- El autor cuenta que conoció este anillo a través del trabajo de atc1441 en ATC_RF03 y la cobertura de Hackaday
Dispositivos compatibles y dónde comprar
- Los dispositivos totalmente compatibles son los siguientes
- Colmi R02
- Colmi R06
- Colmi R10
- Como regla práctica, si en la ficha del producto se indica que usa la app QRing, es probable que sea compatible con este cliente
- Se proporciona un enlace de compra en AliExpress; si el enlace ya no funciona, basta con buscar “COLMI R02”
- Se menciona un caso de compra en la “Colmi official store” por CAD 22 con envío incluido
Funciones ya analizadas mediante ingeniería inversa y trabajo pendiente
- Las funciones que ya funcionan o fueron analizadas son las siguientes
- frecuencia cardiaca en tiempo real y SPO2
- registros de pasos
- registros periódicos de frecuencia cardiaca
- ajuste de hora del anillo
- configuración de frecuencia de registro de HR
- registros de SPO2
- seguimiento del sueño
- medición de “estrés”
- Todavía no se entiende por completo cómo se divide el día en los registros de pasos
- Las funciones planeadas son las siguientes
- agregar más funciones al CLI
- mostrar mejor los datos de frecuencia cardiaca y pasos
- una interfaz web simple
Uso desde la línea de comandos
- Se recomienda encarecidamente instalar pipx para gestionar paquetes de Python como si fueran programas independientes
- El comando de instalación es el siguiente
pipx install git+https://github.com/tahnok/colmi_r02_client
- La búsqueda de anillos cercanos se ejecuta con
colmi_r02_util scan
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
- Una vez que se tiene la dirección BLE, se puede leer la frecuencia cardiaca en tiempo real
colmi_r02_client --address=70:CB:0D:D0:34:1C get-real-time heart-rate
Starting reading, please wait.
[81, 81, 79, 79, 79, 79]
- Los datos del anillo se pueden sincronizar con SQLite
colmi_r02_client --address=3A:08:6A:6F:EB:EC sync
Writing to /home/wes/src/colmi_r02_client/ring_data.sqlite
Syncing from 2024-12-01 01:43:04.723232+00:00 to 2024-12-01 02:03:20.150315+00:00
Done
- El esquema de la base de datos está en database_schema.sql
- La ayuda más reciente del CLI se puede consultar con
colmi_r02_client --help
- Los comandos incluyen las siguientes funciones
- consultar registros de frecuencia cardiaca
- consultar y configurar los ajustes de registros de frecuencia cardiaca
- consultar frecuencia cardiaca en tiempo real
- consultar datos de pasos
- consultar información del dispositivo y nivel de batería
- enviar comandos en crudo
- reiniciar el anillo
- ajustar la hora del anillo
- sincronizar los datos del anillo con SQLite
Biblioteca y documentación
Protocolo de comunicación BLE
- Las notas de análisis en crudo están recopiladas en notes.tahnok.ca, y el punto de partida es 2024-07-07 Smart Ring Hacking
- El anillo puede leerse y escribirse mediante BLE
- No se requieren binding ni claves de seguridad para empezar
- Puede no ser ideal desde el punto de vista de seguridad, pero se aclara que el alcance del anillo es muy pequeño y que no preocupa demasiado exponer el conteo de pasos o la información de frecuencia cardiaca
- La decisión final queda en manos del usuario
- El anillo tiene el siguiente servicio BLE GATT con este UUID
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
- Hay dos characteristics importantes
- RX
6E400002-B5A3-F393-E0A9-E50E24DCCA9E: destino de escritura
- TX
6E400003-B5A3-F393-E0A9-E50E24DCCA9E: se usa por suscripción y es donde llegan las respuestas de paquetes enviadas por el anillo
- Esta estructura es muy parecida al Nordic UART Service y a la comunicación UART/serial común
Estructura de paquetes de 16 bytes
- El anillo se comunica con paquetes de 16 bytes tanto para transmisión como para recepción
- El primer byte siempre cumple la función de comando, etiqueta o tipo
- Por ejemplo, el paquete de solicitud de nivel de batería empieza con
0x03
- El paquete de respuesta también empieza con
0x03
- El último byte siempre es el checksum/crc
- Los 14 bytes del medio son subdata o datos de carga útil
- Algunas solicitudes incluyen datos adicionales
- Casi todas las respuestas devuelven los datos solicitados como subdata
- Un ejemplo de paquete para ajustar la hora está en colmi_r02_client.set_time.set_time_packet
- En algunas solicitudes es necesario interpretar varias respuestas juntas para obtener los datos
- La estructura de paquetes de solicitud y respuesta de funciones específicas puede verse en el código fuente de cada función
- También se pueden consultar en las pruebas los pares de solicitud/respuesta validados y su interpretación en datos legibles por humanos
Enlaces relacionados
1 comentarios
Opiniones de Hacker News
Me entusiasma la idea de probar esto. Acabo de pedir uno. He usado dos anillos Oura y no los recomiendo.
No sé qué tan confiable será este, pero costaba $14, no $300, y tampoco me pide pagar todos los meses para acceder a una API dudosa.
O bien vendes el anillo e incluyes una membresía de por vida gratis, como Garmin https://connect.garmin.com/, o bien arriendas/alquilas el dispositivo por contrato y cobras una tarifa mensual. No puedes hacer ambas cosas.
Oura empieza en 469 CAD https://ouraring.com/product/rings/oura-ring-4/silver, y encima cobra 7.99 CAD al mes https://support.ouraring.com/hc/en-us/articles/360052018753-...
Espero con muchas ganas un anillo de seguimiento del sueño similar que pueda usarse offline con algo como Gadgetbridge.
¿Habrá anillos similares con NFC?
No usaría las funciones inteligentes de salud; parecen juguetes de salud basados en datos. En cambio, al NFC se le pueden encontrar cientos de usos, desde pagos hasta acceso y tarjetas de transporte.
Es posible meterle tokens de seguridad para cosas como pagos o abrir puertas, pero puede ser bastante complicado. Como la superficie detectable del anillo es pequeña, a veces cuesta encontrar la posición de recepción al acercarlo al teléfono.
Además, el software es de bajo nivel y delicado. Por accidente dejé mi anillo permanentemente en modo de solo lectura.
Mi reseña está en https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
Las implementaciones que sí permiten al usuario hacer eso tienen una seguridad muy débil y, aunque todavía se usan con frecuencia, se están retirando gradualmente. Así que, salvo que sea un sistema que tú mismo administras o que seas muy amigo del encargado de IT, no hay forma.
Compré el “V1” cuando costaba $60 y, si sabes manejarlo bien, realmente funciona. También he visto anillos en AliExpress que afirman soportar la misma función, pero todavía no los he probado personalmente.
Parece que también hay anillos duales NFC/RFID que pueden usarse como NFC normal y también para accesos de departamentos a 125kHz.
¿Habrá algún anillo con controles táctiles o botones físicos? Mejor aún si tuviera una ruedita con clics. Como dispositivo de visualización imagino varios LED RGB individuales, aunque también me servirían otros enfoques.
¿Qué tan seguros son estos dispositivos baratos? ¿Hay que preocuparse por una explosión de la batería? Encontré un post que dice que eso pasó con un anillo Oura: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...
¡El hardware sí que se está volviendo barato! Pero el software…
Compré una lámpara de noche de $20 que trae luces LED, receptor Bluetooth, reloj y alarma, e incluso carga inalámbrica para iPhone. También tiene micrófono, así que podría transmitir todas mis conversaciones a algún lado; el propósito aparente es escucharme cantar y hacer parpadear las luces según el tono.
También trae una app práctica para configurar el reloj y las luces. Pero por un defecto de software, la alarma suena todas las noches a la 01:00 AM. No pude apagarla con la app oficial, y no parece algo hecho por un programador de verdad. Aun así, probablemente haya algún bug en la pila Bluetooth que me permita obtener root en la lámpara y arreglarla yo mismo… si tuviera tiempo.
Me gustaría que los fabricantes de hardware sin marca incluyeran al menos un kit mínimo de hacking en la caja del producto.
Estos dispositivos inteligentes suelen dejar puertos de depuración en la placa, a los que se puede acceder fácilmente con pinzas.
Si miras el pull request de GadgetBridge mencionado por dingensundso[0], hay un buen sitio donde la API BLE está bastante bien documentada, incluso los comandos: https://colmi.puxtril.com/
[0]: https://news.ycombinator.com/item?id=41834048
Parece interesante. ¿Habrá algún anillo similar que también tenga sensor de temperatura? Sería divertido poder detectar si te vas a enfermar con uno o dos días de anticipación mediante una app de código abierto, como el anillo Oura o la nueva app Vitals de Apple Watch.
¿O alguien sabe si es posible hacerlo solo con los sensores que trae este anillo?
¿Entonces basta con escanear el dispositivo y leerlo? ¿No hay absolutamente ninguna autenticación, y está diseñado para transmitir las mediciones de forma inalámbrica a cualquiera que esté interesado?
Es un problema en cosas como teclados donde ingresas contraseñas, pero si se trata de que el vecino espíe el termómetro de mi sala o de que alguien espíe la correa de mi frecuencia cardiaca cuando paso trotando, en la práctica no me parece gran cosa.
En los viejos malos tiempos de Bluetooth, muchos dispositivos sin pantalla simplemente tenían el código de emparejamiento 000000 hardcodeado. De todos modos, tampoco aumentaba mucho la seguridad. A diferencia de los dispositivos conectados a internet, no es una arquitectura que en un momento dado esté expuesta a miles de millones de trolls de todo el mundo.
Al final es un dispositivo de recopilación de datos puro, con el que casi no se puede interactuar sin la app. Podrían haber hecho que entrara en modo de emparejamiento tocando la superficie, pero actualmente se empareja con cualquier dispositivo que lo solicite.
Espero que alguien haga firmware personalizado para este anillo. Hay algo de trabajo en el proyecto ATC_RF03 enlazado, pero no sé si alguien sigue trabajando en eso.
Genial. Aunque ya uso un Apple Watch, pedí uno de $18 en Temu.
Me gusta la idea de que sea algo con lo que se puede interactuar directamente y extraer datos en tiempo real, sin instalar una app de teléfono que haga de intermediaria.
Hace unos meses, en este video de YouTube[1], me enteré de que todos los dispositivos de seguimiento del sueño son bastante imprecisos comparados con una polisomnografía adecuada. Eso sí, cada uno es impreciso de maneras distintas.
[1]: https://www.youtube.com/watch?v=mjOYhxLJP90
¿Alguien sabe si los acelerómetros de estos anillos son lo suficientemente precisos como para detectar caídas? Estoy pensando en pacientes mayores que rechazan los smartwatches o los dispositivos que “parecen para ancianos”.
En https://github.com/atc1441/ATC_RF03_Ring/issues/13 hay mucho contenido adicional bueno de hacks.
Por cierto, @tahnok, en mi trabajo principal hago ingeniería inversa de BLE en dispositivos de grado médico, así que me gustaría hackear esto contigo.