- โปรเจกต์นี้มีเป้าหมายเพื่ออ่านข้อมูลสุขภาพและกิจกรรมจาก สมาร์ตริง Colmi R02 ราคาประหยัดแบบโลคัล โดยไม่พึ่งแอปคลาวด์ และมุ่งสู่การใช้งานแบบ ออฟไลน์ 100%
- รองรับ Colmi R02·R06·R10 และมีข้อสังเกตจากประสบการณ์ว่าหากในคำอธิบายสินค้าระบุว่าใช้แอป QRing ก็มีโอกาสเข้ากันได้
- ตอนนี้มีการทำ reverse engineering ได้แล้วสำหรับอัตราการเต้นหัวใจแบบเรียลไทม์·SPO2, บันทึกก้าวเดิน·หัวใจ·การนอน, การตั้งเวลา, ไปจนถึงการวัด “ความเครียด” แต่การตีความบันทึกก้าวเดินยังมีบางส่วนที่ค้างอยู่
- CLI สามารถติดตั้งผ่าน
pipx แล้วใช้สแกน BLE, วัดค่าแบบเรียลไทม์, ซิงก์ SQLite, ดูข้อมูลอุปกรณ์, ส่งคำสั่งดิบ, รีบูต, และตั้งเวลาอุปกรณ์ได้
- การสื่อสารใช้ BLE GATT และโครงสร้างแพ็กเก็ต 16 ไบต์ โดยเข้าถึงได้โดยไม่ต้อง bind หรือใช้ security key ซึ่งสะดวก แต่เรื่องความเป็นส่วนตัวผู้ใช้ต้องตัดสินใจเอง
ไคลเอนต์ออฟไลน์สำหรับสมาร์ตริงตระกูล Colmi R02
- colmi_r02_client คือไคลเอนต์ Python แบบโอเพนซอร์สสำหรับอ่านข้อมูลจากสมาร์ตริงตระกูล Colmi R02
- โปรเจกต์นี้เน้นการใช้งานแบบ โอเพนซอร์ส 100% และ ออฟไลน์ 100%
- Colmi R02 เป็นสมาร์ตริงหรืออุปกรณ์สวมใส่ด้านฟิตเนสราคาราว $20 และมีเซ็นเซอร์ต่อไปนี้
- accelerometer
- ติดตามก้าวเดิน
- ติดตามการนอน
- gesture
- อัตราการเต้นหัวใจ (HR)
- ความอิ่มตัวของออกซิเจนในเลือด (SPO2)
- ผู้พัฒนาเล่าว่ารู้จักแหวนนี้ผ่านงาน ATC_RF03 ของ atc1441 และ บทความใน Hackaday
อุปกรณ์ที่รองรับและช่องทางซื้อ
- อุปกรณ์ที่ยืนยันว่ารองรับเต็มรูปแบบมีดังนี้
- Colmi R02
- Colmi R06
- Colmi R10
- มีข้อสังเกตจากประสบการณ์ว่าหากหน้าสินค้าระบุให้ใช้แอป QRing ก็มีโอกาสเข้ากันได้กับไคลเอนต์นี้
- มีลิงก์ซื้อผ่าน AliExpress และถ้าลิงก์ใช้ไม่ได้ก็ให้ค้นหา “COLMI R02”
- มีตัวอย่างการซื้อจาก “Colmi official store” ในราคา CAD 22 รวมค่าส่ง
ฟีเจอร์ที่ reverse engineering ได้แล้วและงานที่ยังเหลือ
- ฟีเจอร์ที่ใช้งานได้หรือวิเคราะห์แล้วในตอนนี้มีดังนี้
- อัตราการเต้นหัวใจแบบเรียลไทม์ และ SPO2
- บันทึกก้าวเดิน
- บันทึกอัตราการเต้นหัวใจแบบเป็นช่วงเวลา
- ตั้งเวลาของแหวน
- ตั้งค่าความถี่ของบันทึก HR
- บันทึก SPO2
- ติดตามการนอน
- การวัด “ความเครียด”
- สำหรับบันทึกก้าวเดินนั้น ยังเข้าใจไม่ครบถ้วนว่า 1 วันถูกแบ่งอย่างไร
- ฟีเจอร์ที่วางแผนไว้มีดังนี้
- เพิ่ม ความสามารถของ CLI ให้มากขึ้น
- แสดงผลข้อมูลอัตราการเต้นหัวใจและก้าวเดินให้อ่านง่ายขึ้น
- เว็บอินเทอร์เฟซแบบเรียบง่าย
วิธีใช้งานบรรทัดคำสั่ง
- แนะนำอย่างยิ่งให้ติดตั้ง pipx เพื่อจัดการแพ็กเกจ Python ให้ใช้งานเหมือนโปรแกรมแยกได้
- คำสั่งติดตั้งมีดังนี้
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 address แล้ว ก็สามารถอ่านอัตราการเต้นหัวใจแบบเรียลไทม์ได้
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 ได้
- ไม่ต้อง bind หรือใช้ security key เพื่อเริ่มต้นใช้งาน
- ในมุมความปลอดภัย สิ่งนี้อาจไม่ดีนัก แต่ก็มีคำอธิบายว่าแหวนมีระยะทำการสั้นมาก และไม่ได้กังวลมากนักเรื่องการเปิดเผยจำนวนก้าวหรือข้อมูลหัวใจ
- การตัดสินใจสุดท้ายขึ้นอยู่กับผู้ใช้
- แหวนมี บริการ BLE GATT ตาม UUID ต่อไปนี้
6E40FFF0-B5A3-F393-E0A9-E50E24DCCA9E
- มี characteristic สำคัญ 2 ตัว
- RX
6E400002-B5A3-F393-E0A9-E50E24DCCA9E: ใช้สำหรับเขียน
- TX
6E400003-B5A3-F393-E0A9-E50E24DCCA9E: ใช้สำหรับ subscribe และเป็นจุดรับแพ็กเก็ตตอบกลับที่แหวนส่งมา
- โครงสร้างนี้คล้ายกับ Nordic UART Service และการสื่อสารแบบ UART/Serial ทั่วไปมาก
โครงสร้างแพ็กเก็ต 16 ไบต์
- แหวนสื่อสารทั้งขาเข้าและขาออกด้วย แพ็กเก็ต 16 ไบต์
- ไบต์แรกทำหน้าที่เป็นคำสั่ง แท็ก หรือชนิดข้อมูลเสมอ
- ตัวอย่างเช่น แพ็กเก็ตขอระดับแบตเตอรี่จะขึ้นต้นด้วย
0x03
- แพ็กเก็ตตอบกลับก็ขึ้นต้นด้วย
0x03 เช่นกัน
- ไบต์สุดท้ายเป็น checksum/crc เสมอ
- 14 ไบต์ตรงกลางคือ subdata หรือข้อมูลเพย์โหลด
- คำขอบางรายการต้องตีความคำตอบหลายชุดร่วมกันจึงจะได้ข้อมูล
- โครงสร้างแพ็กเก็ตคำขอและคำตอบของฟีเจอร์เฉพาะสามารถดูได้จากซอร์สโค้ดของฟีเจอร์นั้น ๆ
- คู่คำขอ·คำตอบที่ยืนยันแล้ว รวมถึงการตีความข้อมูลในแบบที่มนุษย์อ่านได้ สามารถอ้างอิงจากชุดทดสอบได้เช่นกัน
ลิงก์ที่เกี่ยวข้อง
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
ตื่นเต้นที่จะได้ลองเล่นสิ่งนี้ เพิ่งสั่งไปอันหนึ่ง พอดีเคยใช้แหวน Oura มาสองวงแล้วและไม่แนะนำ
ไม่รู้ว่ามันจะเชื่อถือได้แค่ไหน แต่ราคา $14 ไม่ใช่ $300 และไม่ได้บังคับให้จ่ายรายเดือนเพื่อเข้าถึง API กำกวมอะไรสักอย่าง
จะขายแหวนแล้วแถมสมาชิกตลอดชีพฟรีแบบ 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-...
กำลังรออย่างใจจดใจจ่อให้มี แหวนติดตามการนอน แบบคล้ายกันที่ใช้งานออฟไลน์ได้ด้วยอะไรอย่าง Gadgetbridge
มีแหวนคล้ายกันที่มี NFC ไหม?
ฟีเจอร์สุขภาพอัจฉริยะพวกนี้ไม่ได้มีประโยชน์กับผมเลย ดูเหมือนของเล่นสุขภาพที่ขับเคลื่อนด้วยข้อมูลมากกว่า ในทางกลับกัน NFC เอาไปใช้ได้เป็นร้อยอย่าง ตั้งแต่จ่ายเงิน การเข้าออกอาคาร ไปจนถึงบัตรโดยสาร
ใส่โทเค็นความปลอดภัยสำหรับจ่ายเงินหรือเปิดประตูได้เหมือนกัน แต่ค่อนข้างซับซ้อน แหวนมีพื้นที่รับสัญญาณเล็ก เวลาจะเอาไปแตะกับโทรศัพท์บางทีก็หาตำแหน่งรับได้ยาก
แล้วซอฟต์แวร์ก็ระดับต่ำและจุกจิกมาก ผมเผลอทำแหวนของตัวเองให้กลายเป็น โหมดอ่านอย่างเดียว แบบถาวรไปแล้ว
รีวิวอยู่ที่ https://shkspr.mobi/blog/2024/02/giving-the-finger-to-mfa-a-...
ระบบที่ปล่อยให้ผู้ใช้ทำแบบนั้นได้จะมี ความปลอดภัยอ่อนแอมาก ซึ่งแม้ยังพบใช้อยู่บ่อย แต่ก็กำลังถูกเลิกใช้ไปเรื่อยๆ ดังนั้นถ้าไม่ใช่ระบบที่คุณดูแลเอง หรือสนิทกับฝ่ายไอทีมากจริงๆ ก็ไม่มีทาง
ตอนก่อนหน้านี้เคยซื้อ “V1” ตอนราคา $60 และถ้าคุณรู้วิธีจัดการ มันก็ใช้งานได้จริง ผมก็เห็นแหวนใน AliExpress ที่อ้างว่ารองรับฟังก์ชันเดียวกันเหมือนกัน แต่ยังไม่เคยลองเอง
ดูเหมือนจะมี แหวนคู่ NFC/RFID ที่ใช้เป็น NFC ทั่วไปก็ได้ และใช้กับระบบเข้าอาคารอพาร์ตเมนต์ 125kHz ก็ได้ด้วย
มีแหวนที่มีระบบสัมผัสหรือปุ่มจริงไหม? ถ้ามีล้อหมุนที่ให้ฟีลคลิกด้วยจะยิ่งดี สำหรับจอแสดงผล ผมนึกถึง LED RGB แยกหลายดวง แต่แบบอื่นก็โอเค
อุปกรณ์ราคาถูกแบบนี้ปลอดภัยแค่ไหน? ต้องกังวลเรื่อง แบตเตอรี่ระเบิด ไหม? ผมหาเจอโพสต์ว่ามีเรื่องแบบนั้นเกิดกับแหวน Oura: https://www.reddit.com/r/ouraring/comments/s1fave/ring_batte...
ฮาร์ดแวร์ถูกลงจริงๆ! แต่ซอฟต์แวร์นี่สิ…
ผมซื้อโคมไฟข้างเตียงราคา $20 ที่มีทั้งไฟ LED, ตัวรับบลูทูธ, นาฬิกาและนาฬิกาปลุก, ที่ชาร์จไร้สาย iPhone แถมยังมีไมโครโฟนที่น่าจะสตรีมทุกบทสนทนาของผมไปที่ไหนสักแห่งได้ โดยจุดประสงค์ที่ประกาศไว้คือฟังผมร้องเพลงแล้วทำให้ไฟกะพริบตามระดับเสียง
มันมีแอปสะดวกๆ สำหรับตั้งนาฬิกาและไฟด้วย แต่เพราะบั๊กซอฟต์แวร์ มันดังปลุกทุกคืนตอน 01:00 AM ผมปิดจากแอปทางการไม่ได้เลย และของชิ้นนี้ดูไม่เหมือนสิ่งที่โปรแกรมเมอร์ตัวจริงเป็นคนทำ ถึงอย่างนั้นก็น่าจะมีบั๊กอยู่ตรงไหนสักแห่งใน Bluetooth stack ที่ทำให้ผมได้สิทธิ์ root บนโคมไฟแล้วแก้เองได้… ถ้ามีเวลา
อยากให้ผู้ผลิตฮาร์ดแวร์โนเนมพวกนี้ใส่ ชุดแฮ็กขั้นต่ำ มาในกล่องผลิตภัณฑ์ด้วย
อุปกรณ์อัจฉริยะแบบนี้มักปล่อย พอร์ตดีบัก ทิ้งไว้บนบอร์ด ซึ่งเข้าถึงได้ง่ายด้วยแคลมป์
จาก pull request ของ GadgetBridge[0] ที่ dingensundso พูดถึง ดูเหมือนจะมีเว็บดีๆ ที่เอกสาร BLE API ไว้ค่อนข้างเยอะ รวมถึงคำสั่งด้วย: https://colmi.puxtril.com/
[0]: https://news.ycombinator.com/item?id=41834048
ดูน่าสนใจ มีแหวนคล้ายกันที่มีเซ็นเซอร์วัดอุณหภูมิด้วยไหม? ถ้ามีแอปโอเพนซอร์สแบบเดียวกับ Vitals แอปใหม่ของ Oura Ring หรือ Apple Watch ที่ตรวจได้ว่ากำลังจะป่วยล่วงหน้าสักหนึ่งหรือสองวันก็น่าสนุกดี
หรือมีใครรู้ไหมว่าใช้แค่เซ็นเซอร์ที่อยู่ในแหวนนี้ก็ทำได้หรือเปล่า?
แค่สแกนอุปกรณ์แล้วอ่านข้อมูลได้เลยเหรอ? ไม่มีการยืนยันตัวตนเลย และเป็นโครงสร้างที่กระจายค่าที่วัดได้ผ่านไร้สายให้ใครก็ตามที่สนใจงั้นหรือ?
มันเป็นปัญหากับของอย่างคีย์บอร์ดที่ใช้พิมพ์รหัสผ่าน แต่ถ้าเป็นระดับที่เพื่อนบ้านแอบดูเทอร์โมมิเตอร์ในห้องนั่งเล่นของฉัน หรือมีใครสักคนแอบดูสายคาดวัดชีพจรของฉันตอนวิ่งผ่านไป ก็ดูไม่ใช่ปัญหาใหญ่ในทางปฏิบัติ
ในยุคเก่าๆ ที่ Bluetooth แย่กว่านี้ อุปกรณ์ที่ไม่มีหน้าจอมักฮาร์ดโค้ดรหัสจับคู่เป็น 000000 กันเลยด้วยซ้ำ ยังไงมันก็ไม่ได้เพิ่มความปลอดภัยขึ้นมากอยู่ดี ต่างจากอุปกรณ์ที่เชื่อมต่ออินเทอร์เน็ต มันไม่ได้เปิดให้โทรลล์นับพันล้านทั่วโลกเข้าถึงได้ตลอดเวลา
สรุปคือมันเป็นแค่อุปกรณ์เก็บข้อมูลล้วนๆ ที่แทบโต้ตอบอะไรไม่ได้เลยหากไม่มีแอป แม้จะทำให้เคาะที่ผิวเพื่อเข้าโหมดจับคู่ได้ก็ได้ แต่ตอนนี้มันจับคู่กับอุปกรณ์อะไรก็ได้ที่ร้องขอ
หวังว่าจะมีใครทำเฟิร์มแวร์แบบกำหนดเองสำหรับแหวนนี้ขึ้นมา มีงานบางส่วนอยู่ในโปรเจกต์ ATC_RF03 ที่ลิงก์ไว้ แต่ยังไม่แน่ใจว่าตอนนี้ยังมีใครทำต่ออยู่หรือเปล่า
เจ๋งดี ฉันใส่ Apple Watch อยู่แล้ว แต่ก็สั่งอันราคา $18 จาก Temu ไปแล้ว
ฉันชอบแนวคิดของอุปกรณ์ที่เชื่อมต่อโดยตรงและดึงข้อมูลแบบเรียลไทม์ได้ โดยไม่ต้องติดตั้งแอปบนมือถือมาคั่นกลาง
เมื่อไม่กี่เดือนก่อน ฉันได้รู้จากวิดีโอ YouTube นี้[1] ว่าอุปกรณ์ติดตามการนอนทั้งหมดค่อนข้างไม่แม่นเมื่อเทียบกับการตรวจการนอนหลับแบบ polysomnography ที่เหมาะสม เพียงแต่แต่ละอันคลาดเคลื่อนไม่เหมือนกัน
[1]: https://www.youtube.com/watch?v=mjOYhxLJP90
มีใครรู้ไหมว่ามาตรวัดความเร่งของแหวนพวกนี้แม่นพอจะตรวจจับการหกล้มได้หรือเปล่า? ฉันกำลังนึกถึงผู้ป่วยสูงอายุที่ไม่ยอมใส่สมาร์ตวอทช์หรืออุปกรณ์ที่ “ดูเหมือนของคนแก่”
มีข้อมูลแฮ็กเพิ่มเติมดีๆ เยอะมากใน https://github.com/atc1441/ATC_RF03_Ring/issues/13
เผื่อ @tahnok ฉันทำงานวิศวกรรมย้อนกลับ BLE ของอุปกรณ์เกรดการแพทย์เป็นอาชีพหลักอยู่แล้ว เลยอยากลองมาแฮ็กอันนี้ด้วยกัน