- Projet visant à lire localement les données de santé et d’activité de la bague connectée Colmi R02 bon marché, avec pour objectif une utilisation 100 % hors ligne, sans application cloud
- Cible les Colmi R02, R06 et R10 ; donne comme règle empirique qu’un produit a des chances d’être compatible si sa description mentionne l’utilisation de l’application QRing
- À ce stade, la fréquence cardiaque et la SPO2 en temps réel, les journaux de pas, de fréquence cardiaque et de sommeil, le réglage de l’heure et la mesure du « stress » ont été rétro-ingénierés, mais il reste encore des points à comprendre dans l’interprétation des journaux de pas
- Après installation via
pipx, la CLI permet d’effectuer un scan BLE, des mesures en temps réel, une synchronisation SQLite, la consultation des informations de l’appareil, l’envoi de commandes brutes, le redémarrage et le réglage de l’heure
- La communication utilise BLE GATT et une structure de paquets de 16 octets ; l’accès est possible sans appairage ni clé de sécurité, ce qui est pratique, mais laisse à l’utilisateur le soin d’évaluer les implications pour la vie privée
Client hors ligne pour les bagues connectées de la famille Colmi R02
- colmi_r02_client est un client Python open source permettant de lire les données des bagues connectées de la famille Colmi R02
- Le projet met en avant une utilisation 100 % open source et 100 % hors ligne
- La Colmi R02 est une bague connectée, ou wearable de fitness, vendue autour de 20 $, qui intègre les capteurs suivants
- Accéléromètre
- Suivi des pas
- Suivi du sommeil
- Gestes
- Fréquence cardiaque (HR)
- Saturation en oxygène du sang (SPO2)
- La découverte de la bague est mise en lien avec le travail d’atc1441 sur ATC_RF03 et la couverture de Hackaday
Appareils compatibles et canaux d’achat
- Les appareils entièrement compatibles sont les suivants
- Colmi R02
- Colmi R06
- Colmi R10
- Une règle empirique indique que si la fiche produit mentionne l’utilisation de l’application QRing, il y a des chances qu’elle soit compatible avec ce client
- Un lien d’achat AliExpress est fourni ; si le lien ne fonctionne plus, il suffit de rechercher « COLMI R02 »
- Un exemple d’achat dans la « Colmi official store » mentionne un prix de 22 CAD, livraison comprise
Fonctions rétro-ingénierées et travaux restants
- Les fonctions actuellement opérationnelles ou analysées sont les suivantes
- Fréquence cardiaque en temps réel et SPO2
- Journaux de pas
- Journaux périodiques de fréquence cardiaque
- Réglage de l’heure de la bague
- Réglage de la fréquence des journaux HR
- Journaux SPO2
- Suivi du sommeil
- Mesure du « stress »
- Pour les journaux de pas, la manière dont une journée est découpée n’est pas encore totalement comprise
- Les fonctions prévues sont les suivantes
- Ajouter davantage de fonctions CLI
- Affichage plus lisible des données de fréquence cardiaque et de pas
- Interface web simple
Utilisation en ligne de commande
- Pour gérer le paquet Python comme un programme autonome, l’installation de pipx est fortement recommandée
- La commande d’installation est la suivante
pipx install git+https://github.com/tahnok/colmi_r02_client
- La recherche des bagues à proximité s’effectue avec
colmi_r02_util scan
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
- Une fois l’adresse BLE obtenue, il est possible de lire la fréquence cardiaque en temps réel
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]
- Les données de la bague peuvent être synchronisées vers 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
- Le schéma de base de données se trouve dans database_schema.sql
- L’aide CLI la plus récente se consulte avec
colmi_r02_client --help
- Les commandes incluent les fonctions suivantes
- Consulter les journaux de fréquence cardiaque
- Consulter et définir les paramètres des journaux de fréquence cardiaque
- Consulter la fréquence cardiaque en temps réel
- Consulter les données de pas
- Consulter les informations de l’appareil et le niveau de batterie
- Envoyer une commande brute
- Redémarrer la bague
- Régler l’heure de la bague
- Synchroniser les données de la bague vers SQLite
Bibliothèque et documentation
Protocole de communication BLE
- Les notes d’analyse brutes sont rassemblées sur notes.tahnok.ca, avec comme point de départ 2024-07-07 Smart Ring Hacking
- La bague peut être lue et écrite via BLE
- Aucun appairage ni aucune clé de sécurité n’est nécessaire pour commencer
- Du point de vue de la sécurité, cela peut être problématique, mais l’explication donnée est que la portée de la bague est très faible et que l’exposition du nombre de pas ou de la fréquence cardiaque n’est pas considérée comme très préoccupante
- Le jugement final est laissé à l’utilisateur
- La bague dispose d’un service BLE GATT avec l’UUID suivant
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
- Deux characteristics sont importantes
- RX
6E400002-B5A3-F393-E0A9-E50E24DCCA9E : destination d’écriture
- TX
6E400003-B5A3-F393-E0A9-E50E24DCCA9E : cible d’abonnement, où sont reçues les réponses des paquets envoyés par la bague
- Cette structure ressemble beaucoup au Nordic UART Service et aux communications UART/Serial classiques
Structure des paquets de 16 octets
- La bague communique avec des paquets de 16 octets, aussi bien en émission qu’en réception
- Le premier octet sert toujours de commande, de tag ou de type
- Par exemple, un paquet de requête du niveau de batterie commence par
0x03
- Le paquet de réponse commence lui aussi par
0x03
- Le dernier octet est toujours un checksum/crc
- Il est calculé en additionnant les 15 autres octets, puis en prenant le reste de la division du résultat par 255
- L’implémentation se trouve dans colmi_r02_client.packet.checksum
- Les 14 octets centraux correspondent aux subdata ou aux données de charge utile
- Certaines requêtes incluent des données supplémentaires
- Presque toutes les réponses renvoient les données demandées dans subdata
- Un exemple de paquet de réglage de l’heure se trouve dans colmi_r02_client.set_time.set_time_packet
- Pour certaines requêtes, il faut interpréter plusieurs réponses ensemble afin d’obtenir les données
- La structure des paquets de requête et de réponse propres à chaque fonction peut être consultée dans le code source de la fonction correspondante
- Les paires requête-réponse validées et l’interprétation des données lisible par un humain peuvent également être consultées dans les tests
Liens connexes
- colmi-docs
- PR liée à la prise en charge de Colmi dans Gadgetbridge
1 commentaires
Avis sur Hacker News
J’ai hâte de bricoler avec ça. Je viens d’en commander un. J’ai eu deux bagues Oura et je ne les recommande pas
Je ne sais pas à quel point celle-ci sera fiable, mais elle coûtait 14 $, pas 300 $, et ne demande pas de payer tous les mois pour accéder à une API bancale
Soit on vend la bague et on inclut gratuitement un abonnement à vie, comme Garmin https://connect.garmin.com/, soit on loue l’appareil par contrat et on facture un abonnement mensuel. Pas les deux
Oura commence à 469 CAD https://ouraring.com/product/rings/oura-ring-4/silver, auxquels s’ajoutent 7,99 CAD par mois https://support.ouraring.com/hc/en-us/articles/360052018753-...
J’attends désespérément une bague de suivi du sommeil similaire utilisable hors ligne avec quelque chose comme Gadgetbridge
Existe-t-il des bagues similaires avec NFC ?
Les fonctions santé connectée ne me servent à rien et ressemblent à des gadgets de santé pilotés par les données. En revanche, on peut trouver des centaines d’usages au NFC, du paiement à l’accès, en passant par les cartes de transport
Il est possible d’y mettre des jetons de sécurité pour le paiement ou l’ouverture de portes, mais ça peut être assez compliqué. Comme la surface de détection de la bague est petite, il est parfois difficile de trouver le bon emplacement de réception quand on l’utilise contre un téléphone
Et le logiciel est très bas niveau et pénible. J’ai accidentellement mis ma bague en mode lecture seule permanent
Il y a un test ici : https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
Les implémentations qui permettent à l’utilisateur de le faire sont très peu sécurisées et, même si elles sont encore courantes, elles sont progressivement abandonnées. Donc, à moins que ce soit un système que vous administrez vous-même ou que vous soyez très ami avec le responsable IT, il n’y a pas de solution
J’avais acheté la « V1 » quand elle coûtait 60 $, et elle fonctionne vraiment si l’on sait s’en servir correctement. J’ai aussi vu sur AliExpress des bagues prétendant prendre en charge les mêmes fonctions, mais je ne les ai pas encore essayées moi-même
Il semble aussi exister des bagues double NFC/RFID utilisables à la fois en NFC standard et pour l’accès d’immeuble en 125 kHz
Existe-t-il des bagues avec surface tactile ou bouton physique ? Une molette avec un clic tactile serait encore mieux. Pour l’affichage, j’imagine plusieurs LED RGB séparées, mais d’autres approches iraient aussi
Ces appareils bon marché sont-ils sûrs ? Faut-il craindre une explosion de batterie ? J’ai trouvé un message indiquant que c’était arrivé avec une bague Oura : https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...
Le matériel devient vraiment bon marché ! Mais le logiciel…
J’ai acheté une lampe de chevet à 20 $ qui intègre un éclairage LED, un récepteur Bluetooth, une horloge et une alarme, ainsi que la recharge sans fil pour iPhone. Elle a même un micro qui pourrait streamer toutes mes conversations quelque part ; son objectif affiché est d’écouter quand je chante et de faire clignoter la lumière en fonction de la hauteur des notes
Elle est aussi fournie avec une application pratique pour régler l’horloge et l’éclairage. Mais à cause d’un défaut logiciel, l’alarme sonne tous les soirs à 01:00 AM. Impossible de la désactiver avec l’application officielle, et l’objet ne semble pas avoir été conçu par un vrai programmeur. Cela dit, il y a probablement un bug quelque part dans la pile Bluetooth qui permettrait d’obtenir les droits root sur la lampe et de le corriger moi-même… si j’avais le temps
Ce serait bien que les fabricants de matériel sans marque incluent au moins un kit de hack minimal dans la boîte
Ces objets connectés laissent souvent un port de débogage sur la carte, facilement accessible avec une pince
En regardant la pull request GadgetBridge[0] mentionnée par dingensundso, il y a un bon site qui documente assez largement l’API BLE, jusqu’aux commandes : https://colmi.puxtril.com/
[0]: https://news.ycombinator.com/item?id=41834048
Ça a l’air intéressant. Existe-t-il une bague similaire avec aussi un capteur de température ? Ce serait amusant de pouvoir détecter, un jour ou deux à l’avance, qu’on tombe malade avec une app open source, comme l’Oura Ring ou la nouvelle app Vitals de l’Apple Watch.
Ou bien quelqu’un sait-il si c’est déjà possible avec les seuls capteurs présents dans cette bague ?
Il suffit donc de scanner l’appareil puis de lire les données ? Il n’y a absolument aucune authentification, et l’architecture consiste à diffuser sans fil les mesures à quiconque s’y intéresse ?
C’est problématique pour quelque chose comme un clavier sur lequel on saisit des mots de passe, mais si c’est le voisin qui espionne le thermomètre de mon salon, ou quelqu’un qui capte la fréquence cardiaque de ma ceinture cardio quand je passe en courant, ça ne me semble pas vraiment être un gros problème en pratique.
À la mauvaise époque du Bluetooth, beaucoup d’appareils sans écran avaient simplement un code d’appairage 000000 codé en dur. De toute façon, ça n’apportait pas beaucoup plus de sécurité. Contrairement à un appareil connecté à Internet, ce n’est pas exposé à des milliards de trolls dans le monde entier à tout instant.
Au final, sans application, c’est presque uniquement un dispositif de collecte de données avec lequel on ne peut pratiquement pas interagir. Ils auraient pu permettre de tapoter la surface pour la faire entrer en mode appairage, mais pour l’instant elle s’appaire avec n’importe quel appareil qui le demande.
J’espère que quelqu’un créera un firmware custom pour cette bague. Le projet ATC_RF03 lié contient une partie du travail, mais je ne sais pas si quelqu’un continue encore à travailler dessus.
Sympa. Je porte déjà une Apple Watch, mais j’en ai commandé une à 18 $ sur Temu.
J’aime bien l’idée d’un objet avec lequel on peut s’interfacer directement pour extraire des données en temps réel, sans installer une appli mobile qui sert d’intermédiaire.
Il y a quelques mois, cette vidéo YouTube[1] m’a appris que les appareils de suivi du sommeil étaient tous assez imprécis par rapport à une vraie polysomnographie. Cela dit, chacun est imprécis d’une manière différente.
[1]: https://www.youtube.com/watch?v=mjOYhxLJP90
Quelqu’un sait-il si les accéléromètres de ce type de bagues sont assez précis pour détecter les chutes ? Je pense à des patients âgés qui refusent les montres connectées ou les appareils qui « font personne âgée ».
Il y a beaucoup de hacks supplémentaires intéressants sur https://github.com/atc1441/ATC_RF03_Ring/issues/13.
Au passage, @tahnok, je fais de la rétro-ingénierie BLE sur des dispositifs de qualité médicale dans mon travail principal, donc j’aimerais bien hacker ça avec toi.