名称: fitbit-analytics
描述: Fitbit 健康与健身数据集成。从 Fitbit Web API 获取步数、心率、睡眠、活动、卡路里和趋势数据。生成自动化健康报告和提醒。需要 FITBIT_CLIENT_ID、FITBIT_CLIENT_SECRET、FITBIT_ACCESS_TOKEN、FITBIT_REFRESH_TOKEN。
元数据: {"openclaw":{"requires":{"bins":["python3"],"env":["FITBIT_CLIENT_ID","FITBIT_CLIENT_SECRET","FITBIT_ACCESS_TOKEN","FITBIT_REFRESH_TOKEN"]},"homepage":"https://github.com/kesslerio/fitbit-analytics-openclaw-skill"}}
# 设置 Fitbit API 凭证
export FITBIT_CLIENT_ID="your_client_id"
export FITBIT_CLIENT_SECRET="your_client_secret"
export FITBIT_ACCESS_TOKEN="your_access_token"
export FITBIT_REFRESH_TOKEN="your_refresh_token"
# 生成包含活动区分钟数的晨间简报
python scripts/fitbit_briefing.py
# 获取每日步数
python scripts/fitbit_api.py steps --days 7
# 获取心率数据
python scripts/fitbit_api.py heartrate --days 7
# 睡眠摘要
python scripts/fitbit_api.py sleep --days 7
# 生成每周健康报告
python scripts/fitbit_api.py report --type weekly
# 获取活动摘要
python scripts/fitbit_api.py summary --days 7
在以下场景中使用此技能:
- 获取 Fitbit 指标(步数、卡路里、心率、睡眠)
- 分析活动趋势随时间的变化
- 设置不活动或异常心率的提醒
- 生成每日/每周健康报告
# 生成晨间健康简报(包含活动区分钟数)
python scripts/fitbit_briefing.py # 今日简报
python scripts/fitbit_briefing.py --date 2026-01-20 # 指定日期
python scripts/fitbit_briefing.py --format brief # 三行摘要
python scripts/fitbit_briefing.py --format json # JSON 输出
# 示例输出包含:
# - 昨日活动(记录的运动)
# - 昨日活动区分钟数(总计、脂肪燃烧、有氧、峰值)
# - 今日活动摘要(步数、卡路里、楼层、距离)
# - 心率(静息心率、平均值、区间)
# - 睡眠(时长、效率、清醒次数)
# - 与 7 天平均值的趋势对比
JSON 输出示例:
{
"date": "2026-01-21",
"steps_today": 8543,
"calories_today": 2340,
"distance_today": 6.8,
"floors_today": 12,
"active_minutes": 47,
"resting_hr": 58,
"avg_hr": 72,
"sleep_hours": 7.2,
"sleep_efficiency": 89,
"awake_minutes": 12,
"yesterday_activities": [
{"name": "跑步", "duration": 35, "calories": 320}
],
"yesterday_azm": {
"activeZoneMinutes": 61,
"fatBurnActiveZoneMinutes": 39,
"cardioActiveZoneMinutes": 22
}
}
注意: 心脏负荷数据无法通过 Fitbit API 获取——它是 Fitbit Premium 功能,仅在移动应用中可见。
# 可用命令:
python scripts/fitbit_api.py steps --days 7
python scripts/fitbit_api.py calories --days 7
python scripts/fitbit_api.py heartrate --days 7
python scripts/fitbit_api.py sleep --days 7
python scripts/fitbit_api.py summary --days 7
python scripts/fitbit_api.py report --type weekly
export PYTHONPATH="{baseDir}/scripts"
python - <<'PY'
from fitbit_api import FitbitClient
client = FitbitClient() # 使用环境变量中的凭证
# 获取数据(需要 start_date 和 end_date)
steps_data = client.get_steps(start_date="2026-01-01", end_date="2026-01-16")
hr_data = client.get_heartrate(start_date="2026-01-01", end_date="2026-01-16")
sleep_data = client.get_sleep(start_date="2026-01-01", end_date="2026-01-16")
activity_summary = client.get_activity_summary(start_date="2026-01-01", end_date="2026-01-16")
PY
export PYTHONPATH="{baseDir}/scripts"
python - <<'PY'
from fitbit_api import FitbitAnalyzer
analyzer = FitbitAnalyzer(steps_data, hr_data)
summary = analyzer.summary()
print(summary) # 返回:平均步数、平均静息心率、步数趋势
PY
python {baseDir}/scripts/alerts.py --days 7 --steps 8000 --sleep 7
scripts/fitbit_api.py - Fitbit Web API 封装、命令行接口和分析工具scripts/fitbit_briefing.py - 晨间简报命令行接口(文本/摘要/JSON 输出)scripts/alerts.py - 基于阈值的通知| 方法 | 描述 |
|---|---|
get_steps(start, end) |
每日步数统计 |
get_calories(start, end) |
每日消耗卡路里 |
get_distance(start, end) |
每日距离 |
get_activity_summary(start, end) |
活动摘要 |
get_heartrate(start, end) |
心率数据 |
get_sleep(start, end) |
睡眠数据 |
get_sleep_stages(start, end) |
详细睡眠阶段 |
get_spo2(start, end) |
血氧水平 |
get_weight(start, end) |
体重测量 |
get_active_zone_minutes(start, end) |
活动区分钟数(AZM)细分 |
references/api.md - Fitbit Web API 文档references/metrics.md - 指标定义与解读Fitbit API 需要 OAuth 2.0 认证:
1. 在 https://dev.fitbit.com/apps 创建应用
2. 获取 client_id 和 client_secret
3. 完成 OAuth 流程以获取 access_token 和 refresh_token
4. 设置环境变量或传递给脚本
必需:
- FITBIT_CLIENT_ID
- FITBIT_CLIENT_SECRET
- FITBIT_ACCESS_TOKEN
- FITBIT_REFRESH_TOKEN
定时任务在 OpenClaw 网关中配置,不在此仓库中。将以下内容添加到你的 OpenClaw 设置中:
openclaw cron add \
--name "晨间 Fitbit 健康报告" \
--cron "0 8 * * *" \
--tz "America/Los_Angeles" \
--session isolated \
--wake next-heartbeat \
--deliver \
--channel telegram \
--target "<YOUR_TELEGRAM_CHAT_ID>" \
--message "python3 /path/to/your/scripts/fitbit_briefing.py --format text"
注意: 将 /path/to/your/ 替换为你的实际路径,并将 <YOUR_TELEGRAM_CHAT_ID> 替换为你的 Telegram 频道/群组 ID。