1 ポイント 投稿者 GN⁺ 2024-10-15 | 1件のコメント | WhatsAppで共有
  • 低価格の Colmi R02スマートリング から健康・アクティビティデータをローカルに読み出すためのプロジェクトで、クラウドアプリなしで 100%オフライン 利用を目指す
  • Colmi R02・R06・R10が対象で、製品説明に QRingアプリ の使用が記載されていれば互換性がある可能性が高いという経験則を示している
  • 現在、リアルタイム心拍数・SPO2、歩数・心拍・睡眠ログ、時刻設定、「ストレス」測定までリバースエンジニアリング済みだが、歩数ログの解釈にはまだ未解明の部分がある
  • CLIは pipx でインストール後、BLEスキャン、リアルタイム測定、SQLite同期、デバイス情報取得、生コマンド送信、再起動、時刻設定を実行できる
  • 通信は BLE GATT と16バイトのパケット構造を使用し、バインディングやセキュリティキーなしでアクセスできて便利だが、プライバシー上の判断はユーザーに委ねられる

Colmi R02系スマートリング向けオフラインクライアント

  • colmi_r02_client はColmi R02系スマートリングのデータを読み取るためのオープンソースPythonクライアント
  • プロジェクトは 100%オープンソース100%オフライン での利用を強調している
  • Colmi R02は約 20ドル 価格帯のスマートリングまたはフィットネスウェアラブルで、次のセンサーを含む
    • 加速度計
    • 歩数トラッキング
    • 睡眠トラッキング
    • ジェスチャー
    • 心拍数(HR)
    • 血中酸素飽和度(SPO2)
  • リングを知った経緯として、atc1441の ATC_RF03 の取り組みと Hackaday coverage を挙げている

互換デバイスと購入経路

  • 完全に互換性のあるデバイスは次の通り
    • Colmi R02
    • Colmi R06
    • Colmi R10
  • 製品一覧で QRingアプリ の使用が案内されていれば、このクライアントと互換性がある可能性が高いという経験則がある
  • 購入リンクとして AliExpress を提供しており、リンク切れの場合は「COLMI R02」で検索すればよい
  • 「Colmi official store」で送料込み 22カナダドル で購入した事例がある

リバースエンジニアリング済みの機能と残作業

  • 現在動作する、または解析済みの機能は次の通り
    • リアルタイム心拍数 とSPO2
    • 歩数ログ
    • 定期的な心拍ログ
    • リングの時刻設定
    • HRログ頻度の設定
    • SPO2ログ
    • 睡眠トラッキング
    • 「ストレス」測定
  • 歩数ログについては、1日がどのように分割されるのかがまだ完全には理解されていない状態
  • 予定されている機能は次の通り
    • より多くの CLI機能 の追加
    • 心拍数と歩数データの見やすい出力
    • 簡単なWebインターフェース

コマンドラインでの使い方

  • Pythonパッケージを独立実行プログラムのように管理するには、pipx のインストールを強く推奨する
  • インストールコマンドは次の通り
pipx install git+https://github.com/tahnok/colmi_r02_client
  • 近くのリングの検索は colmi_r02_util scan で実行する
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
  • BLEアドレスを取得すると、リアルタイム心拍数を読み取れる
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]
  • リングのデータは 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
  • データベーススキーマは database_schema.sql にある
  • 最新のCLIヘルプは colmi_r02_client --help で確認する
  • コマンドには次の機能が含まれる
    • 心拍ログの照会
    • 心拍ログ設定の照会と設定
    • リアルタイム心拍数の照会
    • 歩数データの照会
    • デバイス情報とバッテリー残量の照会
    • 生コマンド送信
    • リングの再起動
    • リングの時刻設定
    • リングデータのSQLiteへの同期

ライブラリとドキュメント

BLE通信プロトコル

  • 生の分析ノートは notes.tahnok.ca に整理されており、出発点は 2024-07-07 Smart Ring Hacking
  • リングは BLE で読み書きできる
  • 開始するのにバインディングやセキュリティキーは不要
    • セキュリティ面では好ましくない可能性があるが、リングの範囲は非常に狭く、歩数や心拍情報の露出を大きく心配していないという説明が付いている
    • 最終的な判断はユーザーに委ねられる
  • リングには次のUUIDの BLE GATTサービス がある
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
  • 重要なcharacteristicは2つ
    • RX 6E400002-B5A3-F393-E0A9-E50E24DCCA9E: 書き込み先
    • TX 6E400003-B5A3-F393-E0A9-E50E24DCCA9E: 購読先で、リングが送信したパケット応答を受け取る場所
  • この構造は Nordic UART Service と一般的なUART/Serial通信に非常によく似ている

16バイトのパケット構造

  • リングは送信・受信の両方で 16バイトパケット により通信する
  • 1バイト目は常にコマンド、タグ、タイプの役割を持つ
    • 例えばバッテリー残量要求パケットは 0x03 で始まる
    • 応答パケットも 0x03 で始まる
  • 最後のバイトは常に checksum/crc
  • 中央の14バイトは subdata またはペイロードデータ
  • 一部の要求は、複数の応答をまとめて解釈しないとデータを得られない
  • 特定機能の要求・応答パケット構造は、その機能のソースコードで確認できる
  • 検証済みの要求・応答ペアと、人間が読めるデータ解釈はテストでも参考にできる

関連リンク

1件のコメント

 
GN⁺ 2024-10-15
Hacker Newsのコメント
  • これを触ってみるのが楽しみ。さっき1つ注文した。Ouraリングは2つも使ってみたけど、おすすめしない
    これがどれほど信頼できるかは分からないけど、$14だったし、$300でもなく、微妙なAPIにアクセスするために毎月お金を払えとも言ってこない

    • 個人的には、サブスクなしでは動作しないデバイスを企業が「販売」できないようにすべきだと思う。それは、特にサービス提供者が1社しかない場合、レンタルモデル
      Garminのようにリングを売って生涯メンバーシップを無料で含めるか https://connect.garmin.com/、あるいは契約でデバイスをリース/レンタルして月額利用料を取るべき。両方やってはいけない
      Ouraは469 CADからで https://ouraring.com/product/rings/oura-ring-4/silver、さらに月額7.99 CADがかかる https://support.ouraring.com/hc/en-us/articles/360052018753-...
    • Ouraリングは、ほとんどのスマートウォッチと違ってトラッキング精度は良さそうに見える。ただ、収集するデータとサブスクモデルはひどそうだ
      Gadgetbridgeのようなものでオフラインで使える、似たような睡眠トラッキングリングを切実に待っている
  • NFC付きの似たようなリングもあるのだろうか?
    スマートヘルス機能は使い道がなく、データ駆動の健康系おもちゃのように見える。一方でNFCなら、決済から入退室、交通系カードまで何百通りもの用途が見つかる

    • ある。Z1 Ringを持っている
      決済やドア解錠のようなセキュリティトークンを入れることも可能だが、かなり複雑になり得る。リングは読み取り対象が小さいので、スマートフォンにかざして使うときに受信位置を見つけにくいことがある
      それにソフトウェアが低レベルで扱いづらい。うっかり自分のリングを永久的な読み取り専用モードにしてしまった
      レビューは https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-... にある
    • そのアイデアの問題は、安全なRFID実装はどれもユーザーを締め出すことだ。つまり、NFCリング/キーフォブ/インプラントを買って、銀行カードや交通系カードをそのままコピーすることはできない
      ユーザーがそれをできる実装はセキュリティが非常に弱く、まだ広く使われてはいるものの、徐々に廃止されつつある。だから自分で管理しているシステムでないか、IT担当者ととても親しい場合でない限り、方法はない
    • Dangerous Thingsは人気のあるRFID/NFCインプラントメーカーで、125kHz+13.56MHzのデュアル周波数で複製可能なリングを売っているが、価格が高すぎる($130)
      以前$60だったときに「V1」を買ったが、ちゃんと扱い方を知っていれば実際に動く。AliExpressでも同じ機能に対応すると主張するリングを見かけたが、まだ自分では試していない
    • そういう製品はあると認識している。自分のアパートのRFID入館タグを複製しようとしてライターを探していたとき、AliExpressでたくさん見かけた
      通常のNFCとしても使え、125kHzのアパート入館にも使えるNFC/RFIDデュアルリングもあるようだ
    • スマートヘルス機能は自分も使い道がないが、NFCの代わりにコントローラーと表示装置として使いたい
      タッチや物理ボタンがあるリングはあるだろうか?クリック感のあるホイールならさらに良い。表示装置としては複数の個別RGB LEDを想像しているが、別の方式でも構わない
  • こういう低価格デバイスはどれくらい安全なのだろう?バッテリー爆発を心配すべき? Ouraリングでそういうことがあったという投稿を見つけた: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...

    • それほど心配していない。バッテリーは極めて小さく、おそらく樹脂でポッティングされているので、損傷する可能性は低そうだ
  • ハードウェアは本当に安くなっている! でもソフトウェアは……
    $20のベッドサイドランプを買ったら、LED照明、Bluetoothレシーバー、時計とアラーム、iPhoneのワイヤレス充電まで入っていた。マイクも付いていて、私の会話をすべてどこかへストリーミングできるが、表向きの目的は私の歌を聞いて音程に合わせて照明を点滅させることだ
    時計と照明を設定する便利なアプリも付属している。ところがソフトウェアの不具合で、毎晩01:00 AMにアラームが鳴る。公式アプリでは止められず、本物のプログラマーが作ったものではないように見える。それでもBluetoothスタックのどこかにバグがあって、ランプのroot権限を取得して自分で直せそうではある……時間があれば
    無名のハードウェアメーカーが、製品の箱に最低限のハッキングキットくらい入れてくれるといいのに

    • 「歌を聞いて音程に合わせて照明を点滅させる」という用途に市場性があるほど、音程調整の上手い顧客が十分にいることに驚く
    • 気をつけて開けてみることはできる。大事なランプを壊してしまうかもしれないし、事前に電源プラグは必ず抜くべき
      こういうスマートデバイスは基板にデバッグポートが残っていることが多く、クランプで簡単にアクセスできる
  • dingensundsoが言及していたGadgetBridgeのプルリクエスト[0]を見ると、BLE APIがコマンドまでかなり詳しく文書化された良いサイトがある: https://colmi.puxtril.com/
    [0]: https://news.ycombinator.com/item?id=41834048

  • 面白そう。温度センサーも付いている似たようなリングはあるのだろうか? OuraリングやApple Watchの新しいVitalsアプリのように、オープンソースアプリで1〜2日前に体調を崩しそうか検知できたら面白そう
    それとも、このリングに入っているセンサーだけでも可能なのか知っている人はいる?

    • 自分の経験では、安静時心拍数、睡眠中の心拍数、心拍変動が病気の兆候としてよい指標だった
    • 温度センサー付きの製品を自分も探したい。まだこの価格帯付近にはまったくなさそう?
  • ただデバイスをスキャンしてから読み取ればいいだけ? 認証がまったくなく、興味のある誰にでも測定値を無線でばらまく仕組みなの?

    • 実質的に認証がない構成は、最近のBluetooth機器ではかなり一般的
      パスワードを入力するキーボードのようなものでは問題になるが、隣人が自分のリビングの温度計をのぞき見したり、自分がジョギングで通り過ぎるときに誰かが心拍数ストラップをのぞき見したりする程度なら、実際には大きな問題には思えない
      Bluetoothの良くなかった昔には、画面のない機器がペアリングコードを単に000000にハードコードしていることも多かった。いずれにしてもセキュリティが大きく高まるわけではなかった。インターネット接続機器と違って、どの瞬間にも世界中の何十億もの荒らしにさらされる構造ではない
    • リングのインターフェイスは非常に最小限。センサーとしては歩数を数える加速度計、心拍数と血中酸素を得るためのLED 2個とフォトダイオードがあり、内部には充電状態を示すステータスLEDが1個あるだけ
      結局、アプリなしではほとんど操作できない純粋なデータ収集デバイス。表面をタップしてペアリングモードに入らせることもできたはずだが、現状では要求してくるどんなデバイスともペアリングされる
      誰かがこのリング向けのカスタムファームウェアを作ってくれることを期待している。リンク先のATC_RF03プロジェクトに一部作業はあるが、まだ誰かが継続して作業しているのかは分からない
  • すばらしい。すでにApple Watchを着けているけれど、Temuで**$18**のものを1つ注文した
    中継役になるスマホアプリをインストールせず、直接インターフェイスしてリアルタイムデータを取り出せるもの、というアイデアが気に入った

    • 自分も同じように注文した。Apple Watchの睡眠トラッキングデータに、このリングの睡眠トラッキングデータを加えてみるのを試したい
      数か月前、このYouTube動画[1]で、睡眠トラッキング機器はきちんとした睡眠ポリグラフ検査と比べるとどれもかなり不正確だと知った。ただし、それぞれ不正確さの出方が互いに異なる
      [1]: https://www.youtube.com/watch?v=mjOYhxLJP90
  • こうしたリングの加速度計が、転倒を検知できるほど精密かどうか知っている人はいる? スマートウォッチや「高齢者向けっぽく見える」機器を拒む高齢患者を想定している

  • https://github.com/atc1441/ATC_RF03_Ring/issues/13 に、よい追加ハックの内容がたくさんある
    ちなみに @tahnok、自分は本業で医療グレード機器のBLEリバースエンジニアリングをしているので、一緒にこれをハックしてみたい