台风天宅家,用 AI 把运动 App 改造成支持华为 Watch GT5

8 月 10 日
 awenforlinux

原文 https://www.awen.me/post/604a23cc.html 这里图片贴不了

第 13 号台风"白海豚"的周末,外面风大雨大,哪儿也去不了。索性窝在家里,把上半年写的一个运动 App 拿出来折腾——目标很明确:让它能连上我的华为 Watch GT5 手表,同时把原版 App 那堆广告和混乱的信息全部清掉。

为什么要重做

上半年我开发了一个运动记录 App ( RUNNINGGO ),骑行、跑步、心率带都能用,但一直有个遗憾:它连不上我的华为手表。手表上的心率、血氧、体温、HRV 、睡眠这些数据,官方 App 能看到,但广告太多、信息太乱,我想要一个干净、专注的记录工具,把运动数据统一收进来,再同步到自己的后端,随时在网页上看趋势。

技术路线:Gadgetbridge + 只移植华为模块

华为手表的蓝牙私有协议没有公开文档,从零逆向工作量太大。好在有个开源项目 Gadgetbridge,已经把市面上大多数手环/手表的连接协议都实现了,其中就包括华为 Watch GT 系列的连接、配对手册和数据字典同步。

所以我的方案是:基于 Gadgetbridge ,只把华为相关的模块移植进来,其它品牌全部不要。具体包括:

这样既不用从零啃协议,也不会被 Gadgetbridge 里其它几十个品牌的代码拖累,包体和逻辑都保持精简。

两个 AI 结对干活

这次改造我同时用了 DeepSeek-V4-Flash 和 Kimi 两个模型,分工协作:

实测下来,两个模型互补性很强。遇到协议解析卡住时,换一个模型换个思路,往往就有进展; UI 上的细节问题,另一个模型一眼就能看出来。这种"双模型结对"的开发方式,比单打独斗效率高不少。

AI 运动建议的后端实现

除了 App 端,我还给这套体系配了一个 Go 后端( blog_api ,Gin 框架),专门负责生成 AI 运动建议:

  1. 接口:GET /api/v1/workouts/advice?days=7,带 IP 限流,App 首页的卡片直接调它,支持 7 天 / 30 天切换
  2. 输入聚合:把近 N 天的运动数据(次数、总里程、总时长、平均心率、运动类型分布、逐条记录摘要)和当日健康数据( HRV 、体温、静息心率、呼吸率、体重、血糖、睡眠时长,没有当天数据时自动回退到最新一条)打包给 AI
  3. 生成建议:通过 OpenAI 兼容协议调用 DeepSeek (deepseek-chat),输出结构化的总体评价、运动分析、健康指标、恢复状态、关注提醒和运动建议
  4. 恢复状态对比:AI 会把今日 HRV 、静息心率、睡眠与近 N 天均值对比,比如"今日 HRV 47ms ,低于近 7 天均值 59ms ,睡眠不足,建议低强度恢复训练或休息"
  5. 缓存:结果最长缓存 12 小时,避免每次进首页都重复调用模型

这样一来,App 首页的 AI 运动建议卡片背后是完整的"数据聚合 → 大模型分析 → 缓存下发"链路,7 天和 30 天两个视角随时切换。

改造后的样子

数据链路打通之后,App 变成了一个纯粹的记录工具:

小结

台风天在家折腾了一天,收获挺大:

  1. 开源项目是捷径:Gadgetbridge 这种长期维护的开源协议库,比从零逆向靠谱得多,移植时只取自己需要的模块,干净利落
  2. AI 结对是趋势:DeepSeek-V4-Flash 和 Kimi 配合,一个啃协议一个调 UI ,一天就能完成原本要一周的改造
  3. 数据要掌握在自己手里:官方 App 广告多、信息乱,自己把数据收回来,想看趋势随时看,想怎么展示怎么展示

博客预览数据 https://www.awen.me/marathon

1457 次点击
所在节点    分享发现
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1233109

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX