Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Da Rings · macOS 客户端

原生 macOS(SwiftUI)第三方客户端,连接 Moyoung「Da Rings」智能戒指,实现体征采集与设备交互。

Platform Swift License: MIT

本项目是针对 Moyoung「Da Rings」系列智能戒指(实测机型 R19 / MOY-R193-2.1.6)的非官方、独立开发的 macOS 客户端。协议层通过对合法持有设备的蓝牙通信抓包与互操作分析得出,并用 Swift 独立重写。


✨ 已实现功能

模块 说明 状态
今天 步数汇总(步数/距离/卡路里/活动时长)+ 实时心率 + 电量 ✅ 已验证
心率 实时测量(type=1/feat=0x09)+ 历史心率采样 ✅ 已验证
活动 当日每 30 分钟步数明细柱状图 ✅ 已验证
血氧 历史血氧采样(type=2/feat=0x0B) ✅ 已验证
压力 历史压力指数(type=2/feat=0x19) ✅ 已验证
HRV / 体温 日内 5 分钟时序(HRV 0x10 / 体温 0x16) ✅ 已验证(单包)
睡眠 分期记录查询(type=2/feat=0x0E) ✅ 已解码(分期+跨日时长,5 单测);真实分段数据待真机补录
设备 扫描 / 自动发现 / 连接 / 设备信息 / 电量 ✅ 已验证
设备控制 查找戒指、消息提醒测试 ⚠️ 下发无 ACK,效果需在戒指上观察
摇一摇拍照 enableShutter(0x21) + 手势帧 type=3/0x17(fdd3) ✅ 已验证(R19 进快门模式后推送手势触发帧)
调试控制台 任意原始命令收发 + 按 (type,feature) 分组捕获 ✅ RE 利器

连接可靠性

  • 广播 Service Data 携带 CRREPA 特征 UUID(FDDA/FDD0),首用即可自动识别戒指
  • 持久化已知戒指 UUID,启动即 retrievePeripherals 免扫描直连,掉线自动重连;
  • 30s 链路保活(setTime)消除 ~90s 无流量 idle 断连;
  • 掉线瞬间显示「重连中…」而非「未连接」,避免弱信号下的视觉闪烁。

📐 架构

smartring/
├── RingProtocol/          # Swift Package:协议层(帧编解码 / 命令 / 会话 / GATT)
│   └── Tests/             # 单元测试(金样帧、解码器、命令编码)
├── app/
│   ├── DaRings/           # macOS app(SwiftUI)
│   │   ├── Bluetooth/     # CoreBLETransport(扫描/连接/GATT 读写)
│   │   ├── Services/      # DeviceCoordinator(生命周期/自动发现/保活)
│   │   └── Views/         # SwiftUI 视图
│   └── project.yml        # xcodegen 工程描述
└── DaRings-BLE-Protocol.md  # 逆向协议文档(帧格式、命令表、R19 能力矩阵)

RingProtocol 是纯 Swift、无 UI 依赖的协议包(可在 Linux 构建跑测试);DaRings 是消费该包的 macOS app。


🔧 构建与运行

前置要求:macOS 15.0+、Xcode 26+(Swift 6.0)、xcodegen

# 1. 生成 Xcode 工程
cd app
xcodegen generate

# 2. 命令行构建
xcodebuild -project DaRings.xcodeproj -scheme DaRings \
    -derivedDataPath build -destination 'platform=macOS' build

# 3. 运行(系统会弹蓝牙权限请求)
open build/Build/Products/Debug/DaRings.app

或用 Xcode 打开 app/DaRings.xcodeproj 直接 Run。

跑协议层测试(无需真机):

cd RingProtocol && swift test

真机体征/连接测试需在 app/ 内启用 DaRingsDeviceTests scheme 并连接实机。


📡 协议速览

完整逆向结论见 DaRings-BLE-Protocol.md。要点:

  • GATT:服务 FDDA,特征 FDD1(notify/in)、FDD2(write/out)、FDD3(notify)。无标准 180A。
  • 帧格式FD DA 10 <len> <type> <feature> <payload…>无 CRC、无加密
  • 能力矩阵(官方 assets/config.txt 解密实证):R19 features=[0,0,0,0,0,1,0,0,0]仅开放血氧(bit5)。闹钟/亮度/振动/显示/久坐等设备控制位官方一概未给 R19 开——固件静默丢弃属预期。

⚠️ 关于硬件支持

R19 是体征采集戒指。官方机型能力矩阵为它仅开放血氧;多数「设备控制」查询(闹钟/亮度/振动/显示/心率告警/自动锁屏/SOS/消息)真机无回包,app 侧 sendMessage/findDevice 等写命令虽可下发但无 ACK,效果只能在戒指上观察。这不是 bug,是固件能力限制。

此外,R19 发射功率弱(实测 RSSI -71~-95dBm),嘈杂 2.4GHz 环境下偶发 GATT supervision timeout 链路丢失——属物理现象,app 靠快速自动重连兜底。


⚖️ 免责声明

  • 本项目为第三方、非官方实现,与 Moyoung(膜样)及其关联方无任何关系,未获其授权或背书。
  • 协议层基于对合法持有设备的蓝牙通信抓包与互操作分析,采用净室(clean-room)思路由作者以 Swift 独立重写。本仓库不含任何来自官方 Android 应用(com.moyoung.ring)的专有源代码、二进制 APK、反编译产物或加密资源。
  • 仅供学习、研究和个人使用。使用者需自行承担一切风险与法律后果。Moyoung 及「Da Rings」名称、产品归其各自所有者所有,本项目仅作技术互操作之引用。

📄 许可证

MIT License

About

原生 macOS (SwiftUI) 第三方客户端,连接 Moyoung Da Rings 智能戒指 — 非官方、净室逆向实现

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages