跳转到主要内容

概览

Provider 允许您将可穿戴设备和健康平台连接到 Mirobody Health。连接后,您的健康数据将自动同步并可用于 AI 分析。

Garmin Connect

全面的健身和健康追踪

Whoop

恢复、负荷和睡眠优化
更多 Provider 即将推出。您也可以自己 添加自定义 Provider

连接 Provider

1

获取您的设备凭据

从您的健康设备提供商处获取 API 凭据:
您需要这些凭据来配置您的 Provider 连接。
2

配置 Provider

将您的凭据添加到 config.localdb.yaml
config.localdb.yaml
# 对于 Garmin
GARMIN_CLIENT_ID: '您的_consumer_key'
GARMIN_CLIENT_SECRET: '您的_consumer_secret'
GARMIN_REDIRECT_URL: 'http://localhost:18080/api/v1/pulse/theta/theta_garmin/callback'

# 对于 Whoop
WHOOP_CLIENT_ID: '您的_client_id'
WHOOP_CLIENT_SECRET: '您的_client_secret'
WHOOP_REDIRECT_URL: 'http://localhost:18080/api/v1/pulse/theta/theta_whoop/callback'
3

绑定您的账号

使用 API 发起 OAuth 流程:
# 获取授权 URL
curl "http://localhost:18080/api/v1/pulse/theta/theta_garmin/link?user_id=您的_用户_ID"
访问返回的 URL 以授权访问。
4

验证连接

检查您的 Provider 是否已绑定:
curl "http://localhost:18080/api/v1/pulse/providers"
您连接的 Provider 应显示 "status": "connected"

可用 Provider

Garmin Connect

身份验证: OAuth 1.0
状态: 生产就绪 (Production Ready)
数据同步: 每日自动同步
Garmin Connect 提供来自 Garmin 可穿戴设备(包括健身追踪器、智能手表和自行车码表)的全面健康数据。
Garmin 数据包括详细的活动追踪、高级睡眠分析和全面的心率指标。

Whoop

身份验证: OAuth 2.0
状态: 生产就绪 (Production Ready)
数据同步: 可配置频率的自动同步
Whoop 专注于恢复、负荷和睡眠优化数据,提供有关训练准备度和表现的见解。
Whoop 在面向运动员和健身爱好者的恢复指标、睡眠指导和负荷追踪方面表现出色。

管理已连接的 Provider

列出所有 Provider

curl http://localhost:18080/api/v1/pulse/providers

断开 Provider 连接

curl -X POST http://localhost:18080/api/v1/pulse/theta/theta_garmin/unlink \
  -H "Content-Type: application/json" \
  -d '{"user_id": "您的_用户_ID"}'

数据同步

一旦连接了 Provider,数据同步就会自动进行:
当您第一次连接 Provider 时,Mirobody Health 会拉取历史数据。这可能需要几分钟时间,具体取决于数据量。
初始同步后,数据将自动更新:
  • 计划任务: 每天按配置的时间间隔运行
  • 增量拉取: 仅获取新数据
  • 去重机制: 防止记录重复
如有需要,您也可以通过 API 手动触发同步。
所有 Provider 数据都会转换为标准化指标:
  • 不同 Provider 之间的命名保持一致
  • 统一的单位(SI 国际单位制)
  • ISO 8601 格式的时间戳
  • 存储在 theta_ai.th_series_data 表中
有关详细信息,请参阅 数据格式

常见问题排查

问题: OAuth 授权失败或超时解决方案:
  1. 验证 config.localdb.yaml 中的 API 凭据是否正确
  2. 检查回调 URL 是否完全匹配(包括 http/https)
  3. 确保 Mirobody Health 可以通过回调 URL 访问
  4. 查看提供商的开发者控制台是否有错误提示
  5. 检查 OAuth Token 是否已过期
问题: Provider 已连接,但没有数据出现解决方案:
  1. 等待初始同步完成(查看日志)
  2. 验证用户在其提供商账户中是否有数据
  3. 检查是否存在 API 速率限制问题
  4. 查看同步日志中的错误信息
  5. 如果需要,触发手动同步
问题: 健康数据已过时解决方案:
  1. 检查配置中的同步计划
  2. 验证提供商 API 是否可访问
  3. 查看同步日志中的失败记录
  4. 检查提供商 API 是否有变动或服务停机
  5. 触发手动重新同步

Provider 状态检查

检查 Provider 的连接状态:
import aiohttp
import asyncio

async def check_provider_status(user_id: str):
    async with aiohttp.ClientSession() as session:
        async with session.get(
            f"http://localhost:18080/api/v1/pulse/providers",
            params={"user_id": user_id}
        ) as resp:
            data = await resp.json()
            
            for provider in data["providers"]:
                print(f"{provider['name']}: {provider['status']}")
                if provider['status'] == 'connected':
                    print(f"  最后同步时间: {provider.get('last_sync', 'N/A')}")

# 使用示例
# asyncio.run(check_provider_status("您的_用户_ID"))

下一步