Mirobody 穿戴设备接入指南:Garmin、Oura、Whoop 完整配置教程

发布时间:2026/10/12 13:38:08
Mirobody 穿戴设备接入指南:Garmin、Oura、Whoop 完整配置教程
【免费下载链接】mirobodyTurn scattered health data into answers you can trace. Self-hosted AI health data engine for lab reports, wearables and genetics, with a built-in MCP server. Run it with Docker and one LLM key, or keep every model local on llama.cpp.项目地址https://gitcode.com/gh_mirrors/mi/mirobody点击查看免费下载Mirobody 是一个自托管的 AI 健康数据引擎它能自动接入 Garmin、Oura、Whoop 三款主流穿戴设备把设备里的睡眠、心率、活动数据持续同步进同一个可追溯的健康档案。本教程覆盖从申请开发者凭证、填写配置到验证数据到达的完整流程全程不需要编写代码。一、三家设备接入方式速览Mirobody 内置三个设备插件provider每个都是对应厂商的 OAuth 客户端。凭证按应用逐个签发必须自己向厂商申请这也是整个流程里唯一不能跳过的一步设备认证方式数据同步首次回填Oura 指环OAuth 2.0每小时拉取一次30 天Whoop 腕带OAuth 2.0每天拉取一次2 天Garmin 手表OAuth 1.0a厂商主动推送webhook7 天对应源码分别位于 mirobody/collect/providers/mirobody_oura/、mirobody/collect/providers/mirobody_whoop/ 和 mirobody/collect/providers/mirobody_garmin_connect/三者都继承自 mirobody/collect/providers/_platform/base.py 里的BasePullProvider。二、接入穿戴设备前的 3 项准备1. 部署 Mirobodygit clone --depth 1 https://gitcode.com/gh_mirrors/mi/mirobody cd mirobody ./deploy.sh2. 准备一个公网可达的 HTTPS 地址用户点击同意授权后厂商会把浏览器重定向回你的服务器而三家厂商都不接受localhost或裸 HTTP 作为回调地址。本地开发最简单的办法是开一条内网穿透隧道ngrok http 18060 # 得到类似 https://abc123.ngrok-free.app 的地址把得到的主机名记下来下面所有配置都用它并同时在配置里把它设为MCP_PUBLIC_URL。3. 记住回调 URL 的格式回调路由是现成的格式固定为https://{你的域名}/api/v1/pulse/theta/{设备slug}/callback三家设备的 slug 分别是theta_oura、theta_whoop、theta_garmin注意是完整 slug不能只写厂商名。你在厂商控制台注册的重定向地址和写进配置的地址必须是同一个字符串逐字节一致包括结尾有没有斜杠。4. 凭证写在哪个配置文件设备配置统一放在 config.devices.yaml由config.yaml顶部的INCLUDE列表引入发布时凭证为空、endpoint 默认值已填好。你的凭证应写进优先级更高的config.{env}.yaml覆盖层非 Docker 部署直接改你本地的config.devices.yaml即可Docker 部署镜像自带一份配置改仓库里的文件不生效。把配置块写进compose.yaml旁边的config.localdb.yaml再跑一次./deploy.sh让它挂载进去。一个小知识覆盖层里凡是名字含_SECRET、_KEY、_TOKEN的键服务端第一次读取时就会自动加密落盘——明文只粘贴一次文件会自己改写自己。三、接入 Oura 指环最快上手Oura 是三家流程最短的推荐第一个试。第 1 步注册应用。登录 Oura 开发者控制台的 OAuth 应用管理页面新建一个 OAuth 2.0 应用把重定向 URI 填成https://{你的域名}/api/v1/pulse/theta/theta_oura/callback第 2 步填写配置。在覆盖层中加入示例见 docs/provider-setup.zh-CN.mdOURA_CLIENT_ID: 你的client-id OURA_CLIENT_SECRET: 你的client-secret OURA_REDIRECT_URL: https://{你的域名}/api/v1/pulse/theta/theta_oura/callback第 3 步重启并绑定。重跑./deploy.sh登录网页后绑定 Oura 账号在厂商页面点同意即可。Oura 会同步什么每 10 类集合个人信息、睡眠、每日活动、就绪度、心率、血氧、压力、VO2 Max、训练和身体成分见 mirobody/collect/providers/mirobody_oura/provider_oura.py。注意daily_resilience和心血管年龄需要 Oura 会员订阅普通账户会自动跳过。Oura 的 54 个数据字段到 LOINC 标准的映射维护在 mirobody/res/crosswalks/oura.tsv。四、接入 Whoop 腕带同样是 OAuth 2.0流程和 Oura 几乎一致。到 Whoop 开发者平台注册应用重定向 URI 填https://{你的域名}/api/v1/pulse/theta/theta_whoop/callback填写配置WHOOP_CLIENT_ID: 你的client-id WHOOP_CLIENT_SECRET: 你的client-secret WHOOP_REDIRECT_URL: https://{你的域名}/api/v1/pulse/theta/theta_whoop/callback重启并绑定账号。两个 Oura 和 Whoop 共享的细节值得先知道token 自动刷新access token 过期前会自动刷新你不需要管refresh 必须带 scopeWhoop 的刷新请求要求携带完整 scope 列表默认值已配好含offline离线权限除非要钉到另一套环境否则不用动WHOOP_SCOPES。Whoop 的拉取逻辑每天一次含 cycle、睡眠、训练、恢复、身体测量 5 类集合见 mirobody/collect/providers/mirobody_whoop/provider_whoop.py。五、接入 Garmin 手表流程最长但同步最实时Garmin 有两点和另外两家不同先说清楚再动手OAuth 1.0a流程是 申请临时 token → 用户授权 → 换取正式 tokenMirobody 的回调处理器会按LinkType.OAUTH1分支处理你不需要关心细节只需申请凭证人工审批Garmin Connect 开发者计划需要人工审核通常是整个流程里最耗时的环节建议尽早提交申请。审批拿到 consumer key / secret 之后第 1 步配置凭证。GARMIN_CLIENT_ID: 你的consumer-key GARMIN_CLIENT_SECRET: 你的consumer-secret GARMIN_REDIRECT_URL: https://{你的域名}/api/v1/pulse/theta/theta_garmin/callback第 2 步把 webhook 地址填给 Garmin。Garmin 靠推送同步数据——你绑定后只需把推送端点交给 Garmin之后手表数据更新时 Garmin 服务器会主动推过来这是三者中延迟最低的模式。推送端点POST https://{你的域名}/api/v1/pulse/theta/theta_garmin/webhookwebhook 默认是关闭的返回 404需要先在环境变量里设置COLLECT_WEBHOOK_SECRET然后把带?secret值的地址填给 Garmin或在请求头X-Webhook-Secret里传这个值。第 3 步绑定与回填。绑定成功后Mirobody 会立即回填过去 7 天的数据Oura 是 30 天、Whoop 是 2 天之后全部由推送驱动。解绑时系统会先向 Garmin 撤销注册再删除本地绑定完整实现见 mirobody/collect/providers/mirobody_garmin_connect/provider_garmin.py。六、验证接入成功3 步确认数据真的到了第 1 步看启动日志。重跑./deploy.sh或docker compose up -d注意restart不会重新挂载文件后执行docker compose logs mirobody看到Loaded provider: provider_classOuraProvider说明 provider 已加载。如果你看到的是Provider OuraProvider declined to start (not configured)——这表示凭证没配不是代码坏了两条都是正常的 INFO 级别日志。第 2 步确认对用户可见。curl -s http://localhost:18060/api/v1/pulse/providers | jq .data.providers[].slug列表里应出现theta_oura/theta_whoop/theta_garmin。第 3 步绑定并观察数据到达。在网页里绑定账号、完成厂商授权后Oura 和 Whoop 会立刻发起一次回填拉取之后分别按每小时、每天自动同步Garmin 回填 7 天后转入推送模式。查询已绑定列表curl -s http://localhost:18060/api/v1/pulse/user/providers -H Authorization: Bearer $TOKEN这些接口都定义在 mirobody/server/routers/public_router.py。七、常见问题排查4 个高频故障现象原因与处理日志只有loaded 0 providers所有 provider 都因缺凭证拒绝启动。对着上面章节核一遍键名——OURA_CLIENT_ID打错一个字母和没配置的效果完全一样厂商提示重定向地址无效地址必须与注册的逐字节一致。最常见错误是 slug 写成oura而不是theta_oura回调返回provider not availableprovider 启动时就拒绝了平台下没有注册这个 slug。先修好凭证再谈回调之前正常突然不拉数据了厂商拒绝了 refresh token或当初授权缺少 offline 权限绑定会被标记为 reconnect应用里重新授权一次即可恢复单纯超时则下次拉取会自动重试更多细节可对照 docs/provider-setup.zh-CN.md。八、关键文件速查文件作用config.devices.yaml三家设备的凭证与 endpoint 默认值mirobody/collect/providers/README.mdprovider 机制说明与扩展契约mirobody/collect/providers/mirobody_oura/provider_oura.pyOura 拉取与 OAuth2 流程mirobody/collect/providers/mirobody_whoop/provider_whoop.pyWhoop 拉取与 OAuth2 流程mirobody/collect/providers/mirobody_garmin_connect/provider_garmin.pyGarmin OAuth 1.0a 与 webhook 处理docs/provider-setup.zh-CN.md官方接入文档中文docs/provider-guide.md编写自定义 provider 的完整指南最后提一句设备数据进入 Mirobody 后会按 docs/device-crosswalk.md 里的映射表统一归一到 LOINC 标准——Oura 的 54 个字段、Whoop 的 34 个字段、Garmin 的 23 个字段各有归属。这意味着即便你同时戴着 Garmin 和 Oura同一指标比如血氧、深睡时长也能落在同一条趋势线上这是多设备接入真正值钱的部分。赞分享【免费下载链接】mirobodyTurn scattered health data into answers you can trace. Self-hosted AI health data engine for lab reports, wearables and genetics, with a built-in MCP server. Run it with Docker and one LLM key, or keep every model local on llama.cpp.项目地址https://gitcode.com/gh_mirrors/mi/mirobody点击查看免费下载相关推荐Omi智能穿戴设备完整开发指南从零开始构建AI可穿戴设备Omi智能穿戴设备完整开发指南从零开始构建AI可穿戴设备 在当今AI技术飞速发展的时代 Omi智能穿戴设备 为开发者提供了全新的AI可穿戴开发平台。这款开源人工智能AI 应用语音移动开发后端桌面应用智能硬件MCP 服务Omi智能穿戴设备开源AI可穿戴项链的完整使用指南Omi智能穿戴设备开源AI可穿戴项链的完整使用指南 Omi是全球领先的开源AI可穿戴设备能够自动捕捉对话、提供摘要、生成行动项并为你执行任务。这款创新的AI人工智能AI 应用语音移动开发后端桌面应用智能硬件MCP 服务终极本地语音合成指南如何用Piper在5分钟内实现离线文本转语音终极本地语音合成指南如何用Piper在5分钟内实现离线文本转语音 你是否曾梦想过拥有一个完全离线、无需网络连接的智能语音助手或者希望为你的应用添加自然流畅的语音/音频人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考