- Ein Projekt, das Gesundheits- und Aktivitätsdaten vom günstigen Smart Ring Colmi R02 lokal auslesen will und eine 100 % Offline-Nutzung ohne Cloud-App zum Ziel hat
- Zielgeräte sind Colmi R02, R06 und R10; als Faustregel gilt, dass das Gerät wahrscheinlich kompatibel ist, wenn in der Produktbeschreibung die QRing-App genannt wird
- Derzeit wurden Echtzeit-Herzfrequenz und SPO2, Schritt-, Herzfrequenz- und Schlaf-Logs, Zeiteinstellung sowie die Messung von „Stress“ per Reverse Engineering erschlossen, bei der Interpretation der Schritt-Logs gibt es aber noch offene Punkte
- Nach Installation per
pipx kann die CLI BLE-Scans, Echtzeitmessungen, SQLite-Synchronisierung, Geräteinfos, das Senden roher Befehle, Neustarts und das Setzen der Zeit ausführen
- Die Kommunikation nutzt BLE GATT und eine 16-Byte-Paketstruktur; der Zugriff ist ohne Binding oder Sicherheitsschlüssel möglich, was bequem ist, die Bewertung der Privatsphäre aber dem Nutzer überlässt
Offline-Client für Smart Rings der Colmi-R02-Familie
- colmi_r02_client ist ein Open-Source-Python-Client zum Auslesen von Daten von Smart Rings der Colmi-R02-Familie
- Das Projekt betont 100 % Open Source und 100 % Offline-Nutzung
- Der Colmi R02 ist ein Smart Ring bzw. Fitness-Wearable im Preisbereich von etwa 20 $ und enthält folgende Sensoren
- Beschleunigungsmesser
- Schrittverfolgung
- Schlaftracking
- Gesten
- Herzfrequenz (HR)
- Sauerstoffsättigung im Blut (SPO2)
- Als Weg zur Entdeckung des Rings werden die Arbeiten von atc1441 an ATC_RF03 und die Hackaday-Berichterstattung genannt
Kompatible Geräte und Bezugsquellen
- Voll kompatible Geräte sind die folgenden
- Colmi R02
- Colmi R06
- Colmi R10
- Als Faustregel gilt, dass dieses Client wahrscheinlich kompatibel ist, wenn in der Produktliste die QRing-App genannt wird
- Als Kauflink wird AliExpress angegeben; falls der Link nicht mehr funktioniert, soll man nach „COLMI R02“ suchen
- Es wird ein Kaufbeispiel aus dem „Colmi official store“ für 22 CAD inklusive Versand genannt
Reverse-engineerte Funktionen und offene Arbeiten
- Derzeit funktionieren bzw. analysiert wurden die folgenden Funktionen
- Echtzeit-Herzfrequenz und SPO2
- Schritt-Logs
- Periodische Herzfrequenz-Logs
- Setzen der Ring-Zeit
- Einstellen der HR-Log-Frequenz
- SPO2-Logs
- Schlaftracking
- Messung von „Stress“
- Bei den Schritt-Logs ist noch nicht vollständig verstanden, wie ein Tag aufgeteilt wird
- Geplante Funktionen sind die folgenden
- Weitere CLI-Funktionen hinzufügen
- Schöne Ausgabe für Herzfrequenz- und Schrittdaten
- Eine einfache Weboberfläche
Verwendung über die Kommandozeile
- Für die Verwaltung von Python-Paketen wie eigenständige Programme wird die Installation von pipx dringend empfohlen
- Der Installationsbefehl lautet wie folgt
pipx install git+https://github.com/tahnok/colmi_r02_client
- Die Suche nach Ringen in der Nähe erfolgt mit
colmi_r02_util scan
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
- Wenn die BLE-Adresse bekannt ist, kann die Echtzeit-Herzfrequenz ausgelesen werden
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]
- Ring-Daten können nach SQLite synchronisiert werden
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
- Das Datenbankschema steht in database_schema.sql
- Die aktuelle CLI-Hilfe lässt sich mit
colmi_r02_client --help anzeigen
- Die Befehle umfassen folgende Funktionen
- Herzfrequenz-Logs abrufen
- Einstellungen der Herzfrequenz-Logs abrufen und setzen
- Echtzeit-Herzfrequenz abrufen
- Schrittdaten abrufen
- Geräteinformationen und Batteriestand abrufen
- Rohe Befehle senden
- Ring neu starten
- Ring-Zeit setzen
- Ring-Daten nach SQLite synchronisieren
Bibliothek und Dokumentation
- Das Paket kann als Python-Bibliothek importiert werden, um eigene Werkzeuge direkt zu bauen
- Die auf Docstrings basierende Dokumentation ist unter colmi_r02_client.client und auf der Dokumentationsseite verfügbar
BLE-Kommunikationsprotokoll
- Rohe Analyse-Notizen sind auf notes.tahnok.ca gesammelt; als Einstieg dient 2024-07-07 Smart Ring Hacking
- Der Ring kann über BLE gelesen und beschrieben werden
- Für den Einstieg sind weder Binding noch Sicherheitsschlüssel erforderlich
- Aus Sicherheitssicht ist das möglicherweise nicht gut, allerdings wird erläutert, dass die Reichweite des Rings sehr klein ist und man sich wegen offengelegter Schritt- oder Herzfrequenzdaten nicht allzu große Sorgen macht
- Die endgültige Entscheidung bleibt dem Nutzer überlassen
- Der Ring besitzt einen BLE-GATT-Service mit der folgenden UUID
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
- Es gibt zwei wichtige Characteristics
- RX
6E400002-B5A3-F393-E0A9-E50E24DCCA9E: Ziel für Schreibzugriffe
- TX
6E400003-B5A3-F393-E0A9-E50E24DCCA9E: wird abonniert und empfängt die vom Ring gesendeten Paketantworten
- Diese Struktur ist dem Nordic UART Service und allgemeiner UART-/Seriell-Kommunikation sehr ähnlich
16-Byte-Paketstruktur
- Der Ring kommuniziert sowohl beim Senden als auch beim Empfangen mit 16-Byte-Paketen
- Das erste Byte dient immer als Befehl, Tag oder Typ
- Beispielsweise beginnt ein Paket zur Abfrage des Batteriestands mit
0x03
- Antwortpakete beginnen ebenfalls mit
0x03
- Das letzte Byte ist immer die Checksumme/CRC
- Die 14 Byte in der Mitte sind Subdata bzw. Nutzdaten
- Bei manchen Anfragen müssen mehrere Antworten gemeinsam interpretiert werden, um an die Daten zu kommen
- Die Paketstrukturen für Anfragen und Antworten bestimmter Funktionen lassen sich im jeweiligen Quellcode dieser Funktion nachsehen
- Verifizierte Anfrage-/Antwort-Paare und menschenlesbare Dateninterpretationen finden sich auch in den Tests
Verwandte Links
1 Kommentare
Hacker-News-Kommentare
Ich freue mich darauf, damit herumzuspielen. Habe gerade eins bestellt. Ich habe bereits zwei Oura-Ringe benutzt und würde sie nicht empfehlen
Ich weiß nicht, wie vertrauenswürdig das hier sein wird, aber es hat 14 $ gekostet, nicht 300 $, und man muss auch nicht jeden Monat bezahlen, nur um Zugang zu einer vagen API zu bekommen
Entweder sie verkaufen wie Garmin einen Ring und schließen eine lebenslange Mitgliedschaft kostenlos ein https://connect.garmin.com/, oder sie verleasen/vermieten das Gerät per Vertrag und verlangen eine monatliche Nutzungsgebühr. Beides gleichzeitig geht nicht
Oura beginnt bei 469 CAD https://ouraring.com/product/rings/oura-ring-4/silver, dazu kommen monatlich 7,99 CAD https://support.ouraring.com/hc/en-us/articles/360052018753-...
Ich warte sehnsüchtig auf einen ähnlichen Schlaf-Tracking-Ring, den man mit etwas wie Gadgetbridge offline verwenden kann
Gibt es auch ähnliche Ringe mit NFC?
Die Smart-Health-Funktionen würde ich nie nutzen, sie wirken wie datengetriebenes Gesundheits-Spielzeug. NFC dagegen hätte Hunderte Einsatzmöglichkeiten, von Bezahlen über Zutritt bis zur Fahrkarte
Man kann auch Sicherheitstokens für Zahlungen oder zum Öffnen von Türen darauf speichern, aber das kann ziemlich kompliziert sein. Da der Ring ein kleines Ziel für die Erkennung ist, ist es bei der Nutzung am Smartphone manchmal schwer, die richtige Empfangsposition zu finden
Außerdem ist die Software Low-Level und heikel. Ich habe meinen Ring versehentlich dauerhaft in den Nur-Lese-Modus versetzt
Ein Review gibt es hier: https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
Implementierungen, bei denen der Nutzer das kann, sind sehr unsicher und werden zwar noch verwendet, aber zunehmend ausgemustert. Deshalb gibt es keinen Weg, es sei denn, es ist ein System, das man selbst verwaltet, oder man ist sehr gut mit der IT befreundet
Ich habe damals ein „V1“ gekauft, als es noch 60 $ kostete, und wenn man weiß, wie man damit umgeht, funktioniert es tatsächlich. Auf AliExpress habe ich auch Ringe gesehen, die dieselbe Funktionalität beanspruchen, ausprobiert habe ich sie aber noch nicht
Es scheint auch NFC/RFID-Dual-Ringe zu geben, die sowohl als normales NFC als auch für 125kHz-Apartmentzugang genutzt werden können
Gibt es einen Ring mit Touch- oder physischen Tasten? Ein Rad mit fühlbarem Klick wäre noch besser. Als Anzeige stelle ich mir mehrere einzelne RGB-LEDs vor, aber andere Lösungen wären auch okay
Wie sicher sind solche Billiggeräte eigentlich? Muss man sich Sorgen über eine Akku-Explosion machen? Ich habe einen Beitrag gefunden, in dem das bei einem Oura-Ring passiert sein soll: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...
Hardware wird wirklich immer billiger! Aber Software …
Ich habe eine Bettlampe für 20 $ gekauft, und sie hat LED-Beleuchtung, einen Bluetooth-Empfänger, Uhr und Wecker sowie kabelloses Laden fürs iPhone. Sie hat auch ein Mikrofon und könnte daher all meine Gespräche irgendwohin streamen; der angebliche Zweck ist aber, dass sie meinen Gesang hört und das Licht passend zur Tonhöhe blinken lässt
Dazu gibt es sogar eine praktische App zum Einstellen von Uhr und Beleuchtung. Wegen eines Softwarefehlers geht jedoch jede Nacht um 01:00 AM der Alarm los. Mit der offiziellen App ließ er sich nicht deaktivieren, und das Ganze wirkt nicht wie etwas, das von einem echten Programmierer gebaut wurde. Andererseits gibt es vermutlich irgendwo im Bluetooth-Stack einen Bug, mit dem man Root auf der Lampe bekommen und es selbst reparieren könnte … wenn man Zeit hätte
Es wäre schön, wenn namenlose Hardwarehersteller ihren Produktkartons wenigstens ein minimales Hacking-Kit beilegen würden
Bei solchen Smart-Geräten bleiben auf den Platinen oft Debug-Ports erhalten, an die man mit Klemmen leicht herankommt
Laut dem von dingensundso erwähnten GadgetBridge-Pull-Request[0] gibt es eine gute Website, auf der die BLE-API inklusive der Befehle recht ausführlich dokumentiert ist: https://colmi.puxtril.com/
[0]: https://news.ycombinator.com/item?id=41834048
Sieht interessant aus. Gibt es wohl einen ähnlichen Ring mit Temperatursensor? Es wäre spannend, wenn man wie mit dem Oura-Ring oder der neuen Vitals-App der Apple Watch mit einer Open-Source-App ein oder zwei Tage im Voraus erkennen könnte, dass man krank wird.
Oder weiß jemand, ob das vielleicht schon allein mit den Sensoren in diesem Ring möglich ist?
Muss man das Gerät einfach nur scannen und dann auslesen? Gibt es überhaupt keine Authentifizierung, und sendet es die Messwerte per Funk an jeden, der interessiert ist?
Bei Dingen wie Tastaturen, auf denen man Passwörter eingibt, ist das problematisch, aber wenn der Nachbar mein Wohnzimmerthermometer ausspioniert oder jemand meinen Herzfrequenzgurt mitliest, während ich joggend vorbeilaufe, wirkt das in der Praxis nicht wie ein großes Problem
In den schlechten alten Zeiten von Bluetooth kam es bei Geräten ohne Display oft vor, dass der Pairing-Code einfach fest auf 000000 gesetzt war. Einen großen Sicherheitsgewinn gab es dadurch ohnehin nicht. Anders als bei internetverbundenen Geräten ist man dabei nicht jederzeit Milliarden Trollen weltweit ausgesetzt
Letztlich ist es ein reines Datenerfassungsgerät, mit dem man ohne App kaum interagieren kann. Man hätte die Oberfläche antippen lassen können, um einen Pairing-Modus zu aktivieren, aber aktuell koppelt es sich mit jedem Gerät, das anfragt
Ich hoffe, dass jemand Custom Firmware für diesen Ring baut. Im verlinkten ATC_RF03-Projekt gibt es schon etwas Arbeit dazu, aber ich weiß nicht, ob da derzeit noch jemand aktiv dran ist
Cool. Ich trage zwar schon eine Apple Watch, habe aber bei Temu bereits einen für $18 bestellt
Mir gefällt die Idee eines Geräts, das man direkt ansprechen und aus dem man Echtzeitdaten ziehen kann, ohne eine Smartphone-App als Mittelsmann installieren zu müssen
Vor ein paar Monaten habe ich in diesem YouTube-Video[1] erfahren, dass Schlaftracking-Geräte im Vergleich zu einer richtigen Polysomnographie alle ziemlich ungenau sind. Allerdings ist jedes auf seine eigene Weise ungenau
[1]: https://www.youtube.com/watch?v=mjOYhxLJP90
Weiß jemand, ob die Beschleunigungsmesser in solchen Ringen präzise genug sind, um Stürze zu erkennen? Ich denke an ältere Patienten, die Smartwatches oder Geräte ablehnen, die „wie für Senioren“ aussehen
Unter https://github.com/atc1441/ATC_RF03_Ring/issues/13 gibt es viel gutes zusätzliches Hacking-Material
Zur Info, @tahnok: Ich mache beruflich BLE-Reverse-Engineering an Medizinprodukten und hätte Lust, das gemeinsam zu hacken