1 puntos por GN⁺ 2024-10-15 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2024-10-15
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.

    • Personalmente, creo que no se debería permitir que una empresa “venda” dispositivos que no funcionan sin suscripción. Eso, especialmente cuando hay un solo proveedor del servicio, es un modelo de alquiler.
      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-...
    • A diferencia de la mayoría de los smartwatches, el anillo Oura parece tener buena precisión de seguimiento. Pero los datos que recopila y el modelo de suscripción parecen horribles.
      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.

    • Sí. Tengo un Z1 Ring.
      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-...
    • El problema con esa idea es que todas las implementaciones seguras de RFID dejan fuera al usuario. Es decir, no puedes comprar un anillo/llavero/implante NFC y simplemente copiar una tarjeta bancaria o una tarjeta de transporte.
      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.
    • Dangerous Things es un fabricante popular de implantes RFID/NFC, y vende un anillo clonable de doble frecuencia 125kHz+13.56MHz, pero es demasiado caro ($130).
      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.
    • Tengo entendido que existen productos así. Vi muchos en AliExpress mientras buscaba un lector para clonar la etiqueta RFID de acceso de mi departamento.
      Parece que también hay anillos duales NFC/RFID que pueden usarse como NFC normal y también para accesos de departamentos a 125kHz.
    • Yo tampoco usaría las funciones inteligentes de salud, pero en lugar de NFC me gustaría usarlo como controlador y dispositivo de visualización.
      ¿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...

    • No me preocuparía demasiado. La batería es extremadamente pequeña y probablemente esté encapsulada en resina, así que parece poco probable que se dañe.
  • ¡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.

    • Me sorprende que haya suficientes clientes con tan buena afinación como para que “escuchar el canto y hacer parpadear las luces según el tono” sea un caso de uso vendible.
    • Puedes abrirla con cuidado. Podrías arruinar tu querida lámpara, y antes de hacerlo asegúrate de desenchufarla.
      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?

    • En mi experiencia, la frecuencia cardiaca en reposo, la frecuencia cardiaca durante el sueño y la variabilidad de la frecuencia cardiaca han sido buenos indicadores de que me estaba por enfermar.
    • Yo también quisiera encontrar un producto con sensor de temperatura. ¿Todavía no parece haber nada ni cerca de este rango de precio?
  • ¿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?

    • En realidad, una configuración prácticamente sin autenticación es bastante común hoy en dispositivos Bluetooth.
      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.
    • La interfaz del anillo es extremadamente mínima. Como sensores tiene un acelerómetro para contar pasos, dos LED y un fotodiodo para obtener la frecuencia cardiaca y el oxígeno en sangre, y por dentro solo tiene un LED de estado que indica el nivel de carga.
      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.

    • Yo pedí exactamente lo mismo. Quiero probar sumar los datos de seguimiento del sueño de este anillo a los datos de seguimiento del sueño del Apple Watch.
      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.