harshmandan/open-cardi

GitHub: harshmandan/open-cardi

通过逆向工程 Cardi 氛围灯的 BLE 协议,提供一个无广告、无跟踪、跨平台的 Web 替代客户端。

Stars: 1 | Forks: 0

open-cardi

open-cardi

一个精美的 Web 应用,用于替代 **Cardi Tech** Android 应用 ([`com.qc.xq`](https://play.google.com/store/apps/details?id=com.qc.xq)) —— 可在任何 Chromium 浏览器中控制 Cardi K3 / K4 Active Ultra(以及其他 ConSmart 系列)RGB 氛围灯套件。open-cardi 逆向工程了相同的 BLE 协议 —— 无需 Android,没有广告,没有跟踪。 app-preview - 网站:**[opencardi.vercel.app](https://opencardi.vercel.app)** - 文章:[逆向工程 Cardi Tech BLE 协议](https://harsh.ink/blog/reverse-engineering-cardi-tech) ## 工作原理 该套件的 MCU 是 Beken BK343x,暴露了一个 GATT 服务 (`0xFFF0`),包含一个写入特性 (`0xFFE2`,无响应写入) 和一个通知特性 (`0xFFE1`)。所有命令都是短帧数据包 —— 大多数是 6 字节的 `ED E9`,加上一些特殊命令(`FE _ EF` 用于区域选择,`30 _ 03` 用于速度,`FA _ AF` 用于应用模式)。 解码的操作(来自 APK 反编译 + HCI 嗅探重放): | 操作 | 数据帧 | 用途 | |---|---|---| | 颜色 | `ED 49 R G B E9` | RGB × 亮度,由客户端预乘 | | 全局开 / 关 | `ED F0 …` / `ED 0F …` | 全局开关 | | 区域选择 | `FE z EF` | 将下一个颜色/模式作用于一个区域 (1..8) | | 模式 | `ED 00 00 00 E9` | 23 种预设,操作码由 `Mods[]` 表驱动 | | 速度 | `30 s 03` | 1..100,应用于当前模式 | | 麦克风 | `ED 34 m m m E9` / `ED 33 …` | 4 种互动模式 (经典 / 柔和 / 跳跃 / 舞动) | | 应用模式 | `FA 01/02 AF` | MCU 上的经典渲染 vs 星光渲染 | `CardiClient` (`src/lib/ble/client.ts`) 在连接时会执行一个简短的握手重放,然后所有其他操作都是即发即弃的写入 —— 没有 ACK,没有流控制。状态在本地镜像,以便重新连接时可以重新应用上次的状态快照。 K3 只有 2 个有效区域(前灯带 + 脚部空间);K4 暴露了 8 个。UI 通过一个开关隐藏了 K4 专属的区域。 ## 技术栈 SvelteKit 5 (runes) · TypeScript · Tailwind v4 · Bun · Web Bluetooth · `navigator.bluetooth.requestDevice` 通过服务 `0xFFF0` 和名称前缀(`CarDiLits`、`iLits`、`BaoYin` 等)进行过滤。作为 PWA 提供服务,因此可以安装到 Android 主屏幕;iOS 需要 [Bluefy](https://apps.apple.com/us/app/bluefy-web-ble-browser/id1492822055),因为 Safari 不支持 Web Bluetooth。 ## 支持的设备系列 按 BLE 名称前缀划分(全部共享服务 `0xFFF0` 上的 ConSmart 系列固件): `CarDiLits` · `iLits` · `BaoYin` · `CaChuang` · `CarL` · `MTF-LIGHT` · `AIKON-LIT` · `Dream` · `Flash` 已在 Cardi K3 / K4 Active Ultra 上进行端到端测试。如果您的套件播报了不同的前缀,请参阅下文的 **调试**。 ## 开发 ``` bun install bun run dev ``` ## 调试 一个独立的 Python REPL (`debug/open-cardi.py`, Bleak) 允许您在没有 Web 应用的情况下与套件进行通信 —— 适用于测试未知操作、添加新设备前缀或验证捕获数据。快速开始: ``` uv run debug/open-cardi.py scan # find the device uv run debug/open-cardi.py repl # interactive prompt ``` 有关完整的命令参考和接入新设备系列的工作流程,请参阅 [`debug/README.md`](debug/README.md)。有关更深入的逆向工程演练(HCI 嗅探捕获、使用 jadx 进行 APK 反编译、协议重放),请参阅[文章](https://harsh.ink/blog/reverse-engineering-cardi-tech)。 ## 许可证 [MIT](LICENSE)。
标签:Beken, BLE, Chromium, DNS解析, GATT, PWA, RGB灯光控制, TypeScript, Web蓝牙, 云资产清单, 前端, 去广告, 安全插件, 开源硬件, 开源项目, 无追踪, 智能家居, 智能家居控制, 氛围灯, 浏览器应用, 物联网, 硬件黑客, 移动应用替代, 蓝牙低功耗, 逆向工具, 逆向工程