1 điểm bởi GN⁺ 2024-10-15 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đây là dự án nhằm đọc dữ liệu sức khỏe và hoạt động cục bộ từ nhẫn thông minh Colmi R02 giá rẻ, hướng tới sử dụng 100% offline mà không cần ứng dụng đám mây
  • Nhắm tới Colmi R02, R06 và R10; dự án đưa ra kinh nghiệm rằng nếu phần mô tả sản phẩm ghi dùng ứng dụng QRing thì có khả năng tương thích
  • Hiện đã reverse-engineer được đo nhịp tim và SPO2 theo thời gian thực, nhật ký bước chân, nhịp tim, giấc ngủ, đặt thời gian và cả đo “stress”, nhưng việc diễn giải nhật ký bước chân vẫn còn một số phần chưa hoàn thiện
  • CLI sau khi cài bằng pipx có thể thực hiện quét BLE, đo thời gian thực, đồng bộ SQLite, xem thông tin thiết bị, gửi lệnh thô, khởi động lại và đặt thời gian
  • Giao tiếp dùng BLE GATT và cấu trúc gói 16 byte; có thể truy cập mà không cần binding hay khóa bảo mật nên tiện, nhưng việc đánh giá quyền riêng tư là tùy người dùng

Client offline cho dòng nhẫn thông minh Colmi R02

  • colmi_r02_client là một Python client mã nguồn mở để đọc dữ liệu từ nhẫn thông minh dòng Colmi R02
  • Dự án nhấn mạnh việc sử dụng 100% mã nguồn mở100% offline
  • Colmi R02 là nhẫn thông minh hoặc thiết bị đeo theo dõi thể chất có giá khoảng 20 USD, bao gồm các cảm biến sau
    • Gia tốc kế
    • Theo dõi bước chân
    • Theo dõi giấc ngủ
    • Cử chỉ
    • Nhịp tim (HR)
    • Độ bão hòa oxy trong máu (SPO2)
  • Tác giả biết đến chiếc nhẫn qua công trình ATC_RF03 của atc1441 và bài viết trên Hackaday

Thiết bị tương thích và nơi mua

  • Các thiết bị tương thích hoàn toàn gồm
    • Colmi R02
    • Colmi R06
    • Colmi R10
  • Có kinh nghiệm rằng nếu danh sách sản phẩm hướng dẫn dùng ứng dụng QRing thì có khả năng tương thích với client này
  • Dự án cung cấp liên kết mua trên AliExpress; nếu liên kết hỏng thì có thể tìm “COLMI R02”
  • Có trường hợp mua tại “Colmi official store” với giá 22 CAD bao gồm vận chuyển

Các chức năng đã reverse-engineer và việc còn lại

  • Các chức năng hiện đang hoạt động hoặc đã được phân tích gồm
    • Nhịp tim thời gian thực và SPO2
    • Nhật ký bước chân
    • Nhật ký nhịp tim định kỳ
    • Đặt thời gian cho nhẫn
    • Đặt tần suất ghi nhật ký HR
    • Nhật ký SPO2
    • Theo dõi giấc ngủ
    • Đo “stress”
  • Với nhật ký bước chân, hiện vẫn chưa hiểu hoàn toàn cách một ngày được chia nhỏ như thế nào
  • Các chức năng dự kiến gồm
    • Thêm nhiều chức năng CLI hơn
    • Xuất dữ liệu nhịp tim và bước chân ở dạng dễ xem
    • Giao diện web đơn giản

Cách dùng dòng lệnh

  • Để quản lý gói Python như một chương trình độc lập, dự án khuyến nghị mạnh việc cài pipx
  • Lệnh cài đặt như sau
pipx install git+https://github.com/tahnok/colmi_r02_client
  • Tìm nhẫn ở gần bằng colmi_r02_util scan
colmi_r02_util scan
Found device(s)
Name | Address
--------------------------------------------
R02_341C | 70:CB:0D:D0:34:1C
  • Sau khi có địa chỉ BLE, có thể đọc nhịp tim theo thời gian thực
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]
  • Dữ liệu của nhẫn có thể đồng bộ vào 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
  • Schema cơ sở dữ liệu nằm trong database_schema.sql
  • Xem trợ giúp CLI mới nhất bằng colmi_r02_client --help
  • Các lệnh bao gồm các chức năng sau
    • Xem nhật ký nhịp tim
    • Xem và đặt cấu hình nhật ký nhịp tim
    • Xem nhịp tim thời gian thực
    • Xem dữ liệu bước chân
    • Xem thông tin thiết bị và mức pin
    • Gửi lệnh thô
    • Khởi động lại nhẫn
    • Đặt thời gian cho nhẫn
    • Đồng bộ dữ liệu nhẫn vào SQLite

Thư viện và tài liệu

Giao thức giao tiếp BLE

  • Ghi chú phân tích thô được tổng hợp tại notes.tahnok.ca, với điểm bắt đầu là 2024-07-07 Smart Ring Hacking
  • Nhẫn có thể đọc và ghi qua BLE
  • Không cần binding hay khóa bảo mật để bắt đầu
    • Về mặt bảo mật, điều này có thể không tốt, nhưng dự án giải thích rằng phạm vi của nhẫn rất nhỏ và họ không quá lo về việc lộ số bước hay thông tin nhịp tim
    • Quyết định cuối cùng được để cho người dùng
  • Nhẫn có dịch vụ BLE GATT với UUID sau
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
  • Có hai characteristic quan trọng
    • RX 6E400002-B5A3-F393-E0A9-E50E24DCCA9E: đích ghi
    • TX 6E400003-B5A3-F393-E0A9-E50E24DCCA9E: đích đăng ký nhận, nơi nhận phản hồi gói do nhẫn gửi
  • Cấu trúc này rất giống Nordic UART Service và giao tiếp UART/Serial thông thường

Cấu trúc gói 16 byte

  • Nhẫn giao tiếp bằng gói 16 byte cho cả gửi và nhận
  • Byte đầu tiên luôn đóng vai trò là lệnh, thẻ hoặc kiểu
    • Ví dụ, gói yêu cầu mức pin bắt đầu bằng 0x03
    • Gói phản hồi cũng bắt đầu bằng 0x03
  • Byte cuối cùng luôn là checksum/crc
    • Tính bằng cách cộng tất cả 15 byte còn lại rồi lấy phần dư khi chia kết quả cho 255
    • Phần triển khai nằm ở colmi_r02_client.packet.checksum
  • 14 byte ở giữa là subdata hoặc dữ liệu payload
    • Một số yêu cầu có chứa dữ liệu bổ sung
    • Hầu hết phản hồi trả dữ liệu được yêu cầu dưới dạng subdata
    • Ví dụ về gói đặt thời gian có tại colmi_r02_client.set_time.set_time_packet
  • Một số yêu cầu cần diễn giải nhiều phản hồi cùng lúc để lấy dữ liệu
  • Cấu trúc gói yêu cầu/phản hồi của từng chức năng có thể xem trong mã nguồn của chức năng tương ứng
  • Các cặp yêu cầu/phản hồi đã được kiểm chứng và phần diễn giải dữ liệu dạng con người đọc được cũng có thể tham khảo trong test

Liên kết liên quan

  • colmi-docs
  • PR liên quan đến hỗ trợ Colmi của Gadgetbridge

1 bình luận

 
GN⁺ 2024-10-15
Ý kiến trên Hacker News
  • Rất mong được nghịch thử cái này. Vừa đặt mua một chiếc. Tôi đã dùng tới hai chiếc nhẫn Oura, nhưng không khuyến nghị
    Không biết cái này đáng tin đến mức nào, nhưng nó chỉ $14, không phải $300, và cũng không bắt trả tiền hằng tháng để truy cập một API mập mờ

    • Cá nhân tôi cho rằng không nên cho phép các công ty “bán” những thiết bị không hoạt động nếu không có gói thuê bao. Đó là mô hình cho thuê, đặc biệt khi chỉ có một nhà cung cấp dịch vụ
      Hoặc là bán nhẫn và kèm miễn phí hội viên trọn đời như Garmin https://connect.garmin.com/, hoặc là cho thuê/lease thiết bị theo hợp đồng và thu phí hằng tháng. Không thể làm cả hai
      Oura bắt đầu từ 469 CAD https://ouraring.com/product/rings/oura-ring-4/silver, rồi còn thêm 7.99 CAD mỗi tháng https://support.ouraring.com/hc/en-us/articles/360052018753-...
    • Nhẫn Oura, khác với phần lớn smartwatch, có vẻ có độ chính xác theo dõi khá tốt. Nhưng dữ liệu mà nó thu thập và mô hình thuê bao thì trông thật tệ
      Tôi đang rất mong có một nhẫn theo dõi giấc ngủ tương tự có thể dùng offline với thứ như Gadgetbridge
  • Có nhẫn tương tự nào có NFC không?
    Tôi không có nhu cầu dùng các tính năng sức khỏe thông minh; chúng trông như đồ chơi sức khỏe dựa trên dữ liệu. Trong khi đó NFC có thể dùng vào hàng trăm việc, từ thanh toán đến ra vào cửa, thẻ giao thông

    • Có. Tôi có Z1 Ring
      Cũng có thể đưa các token bảo mật như thanh toán hay mở cửa vào đó, nhưng có thể khá phức tạp. Vì nhẫn là mục tiêu nhận diện nhỏ, đôi khi khó tìm đúng vị trí nhận khi áp vào điện thoại
      Và phần mềm thì cấp thấp và khó dùng. Tôi đã lỡ biến nhẫn của mình vĩnh viễn thành chế độ chỉ đọc
      Bài đánh giá ở đây: https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
    • Vấn đề với ý tưởng đó là mọi triển khai RFID an toàn đều loại người dùng ra khỏi quy trình. Nghĩa là bạn không thể mua một chiếc nhẫn/móc khóa/implant NFC rồi cứ thế sao chép thẻ ngân hàng hay thẻ giao thông vào
      Những triển khai cho phép người dùng làm vậy thì bảo mật rất yếu, và dù vẫn còn được dùng khá phổ biến, chúng đang dần bị loại bỏ. Vì vậy nếu đó không phải là hệ thống bạn tự quản lý, hoặc bạn không cực kỳ thân với người phụ trách IT, thì không có cách nào
    • Dangerous Things là một nhà sản xuất implant RFID/NFC phổ biến, họ bán nhẫn hai tần số 125kHz+13.56MHz có thể sao chép, nhưng giá quá đắt ($130)
      Trước đây khi còn $60 tôi đã mua bản “V1”, và nếu biết xử lý đúng cách thì nó thực sự hoạt động. Tôi cũng đã thấy trên AliExpress có những chiếc nhẫn tuyên bố hỗ trợ cùng tính năng, nhưng chưa tự dùng thử
    • Theo tôi biết thì có loại sản phẩm như vậy. Khi tìm bật lửa để sao chép thẻ ra vào RFID của chung cư, tôi thấy rất nhiều trên AliExpress
      Có vẻ cũng có nhẫn kép NFC/RFID vừa dùng được như NFC thông thường, vừa dùng được cho ra vào chung cư 125kHz
    • Tôi cũng không cần các tính năng sức khỏe thông minh, nhưng thay vì NFC, tôi muốn dùng nó như bộ điều khiển và thiết bị hiển thị
      Có chiếc nhẫn nào có cảm ứng hoặc nút vật lý không? Nếu là bánh xe có cảm giác click thì càng tốt. Với phần hiển thị, tôi hình dung nhiều LED RGB riêng lẻ, nhưng cách khác cũng được
  • Những thiết bị giá rẻ kiểu này an toàn đến mức nào? Có phải lo pin phát nổ không? Tôi tìm thấy bài nói rằng chuyện đó đã xảy ra với nhẫn Oura: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...

    • Tôi không quá lo. Pin cực kỳ nhỏ, và có lẽ đã được đổ nhựa potting, nên trông khả năng bị hư hại là thấp
  • Phần cứng đúng là đang rẻ đi thật! Nhưng phần mềm thì…
    Tôi mua một chiếc đèn ngủ $20, trong đó có đèn LED, bộ thu Bluetooth, đồng hồ và báo thức, cả sạc không dây iPhone. Nó còn có mic nên có thể stream mọi cuộc trò chuyện của tôi đi đâu đó; mục đích bề ngoài là nghe tôi hát rồi nhấp nháy đèn theo cao độ
    Nó cũng kèm một ứng dụng tiện lợi để đặt đồng hồ và đèn. Nhưng vì lỗi phần mềm, báo thức reo mỗi đêm lúc 01:00 AM. Không thể tắt bằng app chính thức, và có vẻ không phải thứ do lập trình viên thật sự làm ra. Dù vậy có lẽ ở đâu đó trong Bluetooth stack có bug, đủ để lấy quyền root của đèn và tự sửa… nếu có thời gian
    Ước gì các nhà sản xuất phần cứng vô danh ít nhất cũng bỏ một bộ công cụ hack tối thiểu vào hộp sản phẩm

    • Thật ngạc nhiên là có đủ khách hàng có khả năng giữ đúng cao độ tốt đến mức công dụng “nghe hát rồi nhấp nháy đèn theo cao độ” có thể bán được
    • Có thể cẩn thận mở ra xem. Bạn có thể làm hỏng chiếc đèn quý của mình, và nhớ phải rút phích cắm điện trước
      Các thiết bị thông minh kiểu này thường còn để lại cổng debug trên bo mạch, nên có thể dễ dàng tiếp cận bằng kẹp
  • Nhìn vào pull request GadgetBridge[0] mà dingensundso nhắc đến, có một trang tốt đã tài liệu hóa khá nhiều BLE API, kể cả các lệnh: https://colmi.puxtril.com/
    [0]: https://news.ycombinator.com/item?id=41834048

  • Trông khá thú vị. Có chiếc nhẫn tương tự nào cũng có cảm biến nhiệt độ không? Sẽ rất hay nếu một ứng dụng mã nguồn mở có thể phát hiện bạn sắp ốm trước một hai ngày, giống như nhẫn Oura hay ứng dụng Vitals mới của Apple Watch
    Hoặc có ai biết liệu chỉ với các cảm biến có trong chiếc nhẫn này thì có làm được không?

    • Theo trải nghiệm của tôi, nhịp tim khi nghỉ, nhịp tim khi ngủ và độ biến thiên nhịp tim là những chỉ dấu tốt cho thấy bệnh sắp đến
    • Tôi cũng muốn tìm một sản phẩm có cảm biến nhiệt độ. Có vẻ như hiện vẫn chưa có cái nào gần tầm giá này nhỉ?
  • Chỉ cần quét thiết bị rồi đọc dữ liệu là được à? Hoàn toàn không có xác thực, và nó phát không dây các chỉ số cho bất kỳ ai quan tâm sao?

    • Cấu hình gần như không có xác thực thật ra khá phổ biến ở các thiết bị Bluetooth ngày nay
      Nó sẽ là vấn đề với những thứ như bàn phím dùng để nhập mật khẩu, nhưng nếu chỉ là hàng xóm nhìn lén nhiệt kế trong phòng khách của tôi, hoặc ai đó nhìn lén dây đeo đo nhịp tim của tôi khi tôi chạy bộ ngang qua, thì thực tế có vẻ không phải vấn đề lớn
      Vào thời Bluetooth còn tệ hại trước đây, nhiều thiết bị không có màn hình cũng hard-code mã ghép đôi là 000000. Dù sao thì bảo mật cũng không tăng lên được bao nhiêu. Khác với thiết bị kết nối Internet, nó không phải kiểu bị phơi ra trước hàng tỷ troll trên toàn thế giới vào bất kỳ thời điểm nào
    • Giao diện của chiếc nhẫn cực kỳ tối giản. Về cảm biến thì có gia tốc kế để đếm bước, hai đèn LED và photodiode để lấy nhịp tim và oxy trong máu, bên trong chỉ có một đèn LED trạng thái cho biết tình trạng sạc
      Rốt cuộc, nếu không có ứng dụng thì nó gần như là một thiết bị thu thập dữ liệu thuần túy, hầu như không thể tương tác. Lẽ ra có thể làm kiểu gõ lên bề mặt để đưa nó vào chế độ ghép đôi, nhưng hiện tại nó sẽ ghép đôi với bất kỳ thiết bị nào yêu cầu
      Hy vọng sẽ có ai đó làm firmware tùy chỉnh cho chiếc nhẫn này. Dự án ATC_RF03 được liên kết có một phần công việc liên quan, nhưng tôi chưa rõ hiện còn ai tiếp tục làm không
  • Tuyệt. Tôi đã đeo Apple Watch rồi nhưng vẫn đặt một chiếc $18 trên Temu
    Tôi thích ý tưởng về một món đồ có thể giao tiếp trực tiếp để lấy dữ liệu thời gian thực, mà không cần cài ứng dụng điện thoại làm trung gian

    • Tôi cũng đặt đúng như vậy. Tôi muốn thử thêm dữ liệu theo dõi giấc ngủ của chiếc nhẫn này vào dữ liệu theo dõi giấc ngủ của Apple Watch
      Vài tháng trước, qua video YouTube này[1], tôi biết rằng các thiết bị theo dõi giấc ngủ đều khá thiếu chính xác khi so với đo đa ký giấc ngủ đúng chuẩn. Tuy nhiên, cách mỗi thiết bị thiếu chính xác lại khác nhau
      [1]: https://www.youtube.com/watch?v=mjOYhxLJP90
  • Có ai biết gia tốc kế trong các loại nhẫn này có đủ chính xác để phát hiện té ngã không? Tôi đang nghĩ đến những bệnh nhân cao tuổi từ chối dùng smartwatch hoặc các thiết bị “trông như dành cho người già”

  • Có rất nhiều nội dung hack bổ sung hay ở https://github.com/atc1441/ATC_RF03_Ring/issues/13
    Nhân tiện @tahnok, công việc chính của tôi là reverse engineering BLE cho các thiết bị cấp y tế, nên tôi rất muốn cùng hack cái này