netseye/smartring-mac

GitHub: netseye/smartring-mac

该项目是基于净室逆向 BLE 协议独立开发的 Moyoung Da Rings 智能戒指非官方 macOS SwiftUI 客户端,支持体征数据采集与设备管理。

Stars: 0 | Forks: 0

# Da Rings · macOS 客户端 [![Platform](https://img.shields.io/badge/platform-macOS%2015%2B-blue)](#) [![Swift](https://img.shields.io/badge/Swift-6.0-orange)](#) [![License: MIT](https://img.shields.io/badge/license-MIT-green)](./LICENSE) 本项目是针对 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) | ⚠️ 原始字节,分期解码待补 | | 设备 | 扫描 / 自动发现 / 连接 / 设备信息 / 电量 | ✅ 已验证 | | 设备控制 | 查找戒指、消息提醒测试 | ⚠️ 下发无 ACK,效果需在戒指上观察 | | 调试控制台 | 任意原始命令收发 + 按 (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](https://github.com/yonaskolb/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 ## 📡 协议速览 完整逆向结论见 [DaRings-BLE-Protocol.md](./DaRings-BLE-Protocol.md)。要点: - **GATT**:服务 `FDDA`,特征 `FDD1`(notify/in)、`FDD2`(write/out)、`FDD3`(notify)。无标准 180A。 - **帧格式**:`FD DA 10 `,**无 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](./LICENSE)
标签:macOS 客户端, SwiftUI, 云资产清单, 健康数据, 智能穿戴, 物联网, 蓝牙通信, 逆向工程