Garmin Health Report
by @gzzzj
Generate comprehensive daily health reports from Garmin Connect data with professional running analysis (Heart Rate Zones, TRIMP, Jack Daniels VDOT).
clawhub install garmin-health-report📖 About This Skill
name: garmin-health-report description: Generate comprehensive daily health reports from Garmin Connect data with professional running analysis (Heart Rate Zones, TRIMP, Jack Daniels VDOT). version: 2.0.0 metadata: openclaw: requires: bins: - python3 python: ">=3.8" install: - kind: pip packages: - garth>=0.4.0 emoji: "🏃♂️" homepage: https://github.com/yourusername/garmin-health-report
Garmin Health Report
Generate professional daily health reports from Garmin Connect data with advanced running analysis.
Features:
Regional Support: Works with both Garmin.com (international) and Garmin.cn (China region) accounts.
Quick Start
1. Install Dependencies
This skill requires Python 3.8 or higher and garth library:
# Install garth (Garmin Connect authentication library)
pip3 install garthVerify installation
python3 -c "import garth; print('garth installed successfully')"
2. Authenticate with Garmin Connect
First time setup requires authentication with Garmin Connect:
# Navigate to skill directory
cd ~/.agents/skills/garmin-health-reportRun authentication script
python3 authenticate.py
Follow prompts to enter your Garmin Connect username and password. Tokens will be securely stored in ~/.garmin-health-report/tokens.json.
For China Region Users (garmin.cn):
Create a config file before authenticating:
mkdir -p ~/.garmin-health-report
cat > ~/.garmin-health-report/config.json << 'EOF'
{
"is_cn": true,
"log_level": "INFO"
}
EOF
Then run python3 authenticate.py.
3. Generate Health Report
Generate a report for today or any specific date:
# Today's report
python3 health_daily_report.pySpecific date
python3 health_daily_report.py 2025-01-15Save to file
python3 health_daily_report.py > ~/health_report_$(date +%Y-%m-%d).txt
4. (Optional) Automate with Cron
To automatically generate daily health reports, add to your crontab:
crontab -eAdd this line for daily report at 23:00
0 23 * * * /usr/bin/python3 /path/to/health_daily_report.py >> /path/to/health_report.log 2>&1
Usage Examples
# Generate today's report
python3 health_daily_report.pyGenerate report for a specific date
python3 health_daily_report.py 2026-03-01Check authentication status
python3 authenticate.pyLogout and remove saved tokens
python3 authenticate.py
Then choose 'y' when prompted to logout
Understanding the Metrics
Heart Rate Zones
| Zone | Intensity | Purpose | % HRR | |-------|-----------|----------|---------| | 1 | Recovery | Warm-up, recovery | <50% | | 2 | Aerobic Base | Build foundation | 50-60% | | 3 | Aerobic Endurance | Improve endurance | 60-70% | | 4 | Lactate Threshold | Raise threshold | 70-80% | | 5 | VO2Max | Maximal intensity | >80% |
TRIMP (Training Impulse)
A measure of training load combining duration and intensity:
VDOT (VDot O₂max)
Estimate of running aerobic capacity (based on Jack Daniels' Running Formula). Higher VDOT = faster race pace potential.
VDOT is used to calculate optimal training paces:
Output Format
The report generates a beautifully formatted text output:
📅 2026-03-01 健康日报
============================================================😴 睡眠质量
总睡眠:7.7 小时
└─ 深睡:1.4h (18%) | 浅睡:4.5h (58%) | REM:1.9h (24%)
睡眠评分:82 (良好)
💓 心率监测
静息心率:57 bpm 💙
👟 活动量
今日步数:13620 步
步数目标:10000 步
完成度:136.2%
...
💪 运动数据分析(专业版)
... (detailed HR zones, TRIMP, VDOT analysis)
💡 J.A.R.V.I.S.有话说
... (personalized insights)
📈 长期趋势(过去7天)
... (7-day pattern analysis)
============================================================
💪 今天运动量很充足!继续保持!
✨ 明天加油!💪
Configuration
Edit the configuration section at the top of health_daily_report.py:
# Health history file (for 7-day trend analysis)
HISTORY_FILE = os.path.expanduser("~/.garmin_health_report/history.json")User profile (optional, for more accurate HR zone calculations)
USER_RESTING_HR = None # e.g., 53
USER_AGE = None # e.g., 25
Setting USER_RESTING_HR and USER_AGE improves accuracy of:
If not set, defaults will be used (Age: 30, Resting HR: 60).
Troubleshooting
Error: garth not installed
ModuleNotFoundError: No module named 'garth'
Solution: Install garth:
pip3 install garth
Error: Not authenticated
Error: Not authenticated.
Run 'python3 authenticate.py' first.
Solution: Run python3 authenticate.py to authenticate with Garmin Connect.
China Region Issues
# Verify config
cat ~/.garmin-health-report/config.json
Should show: {"is_cn": true, ...}
Clear tokens and re-authenticate
rm ~/.garmin-health-report/tokens.json
python3 authenticate.py
Privacy & Data
~/.garmin-health-report/tokens.json~/.garmin_health_report/history.jsonDifferences from Original (garmer-based Version)
This version uses garth directly instead of garmer:
✅ Simpler dependency - Only requires garth (a single library)
✅ Same features - All original functionality preserved:
- Sleep analysis
- Heart rate monitoring
- Steps tracking
- Activity analysis
- Professional running metrics (HR Zones, TRIMP, VDOT)
- 7-day trend analysis
- Personalized recommendations
Why the change?
pip3 install garth vs dealing with garmer's issues)License
MIT License - See LICENSE file for details.
Credits
💡 Examples
1. Install Dependencies
This skill requires Python 3.8 or higher and garth library:
# Install garth (Garmin Connect authentication library)
pip3 install garthVerify installation
python3 -c "import garth; print('garth installed successfully')"
2. Authenticate with Garmin Connect
First time setup requires authentication with Garmin Connect:
# Navigate to skill directory
cd ~/.agents/skills/garmin-health-reportRun authentication script
python3 authenticate.py
Follow prompts to enter your Garmin Connect username and password. Tokens will be securely stored in ~/.garmin-health-report/tokens.json.
For China Region Users (garmin.cn):
Create a config file before authenticating:
mkdir -p ~/.garmin-health-report
cat > ~/.garmin-health-report/config.json << 'EOF'
{
"is_cn": true,
"log_level": "INFO"
}
EOF
Then run python3 authenticate.py.
3. Generate Health Report
Generate a report for today or any specific date:
# Today's report
python3 health_daily_report.pySpecific date
python3 health_daily_report.py 2025-01-15Save to file
python3 health_daily_report.py > ~/health_report_$(date +%Y-%m-%d).txt
4. (Optional) Automate with Cron
To automatically generate daily health reports, add to your crontab:
crontab -eAdd this line for daily report at 23:00
0 23 * * * /usr/bin/python3 /path/to/health_daily_report.py >> /path/to/health_report.log 2>&1
⚙️ Configuration
Edit the configuration section at the top of health_daily_report.py:
# Health history file (for 7-day trend analysis)
HISTORY_FILE = os.path.expanduser("~/.garmin_health_report/history.json")User profile (optional, for more accurate HR zone calculations)
USER_RESTING_HR = None # e.g., 53
USER_AGE = None # e.g., 25
Setting USER_RESTING_HR and USER_AGE improves accuracy of:
If not set, defaults will be used (Age: 30, Resting HR: 60).
📋 Tips & Best Practices
Error: garth not installed
ModuleNotFoundError: No module named 'garth'
Solution: Install garth:
pip3 install garth
Error: Not authenticated
Error: Not authenticated.
Run 'python3 authenticate.py' first.
Solution: Run python3 authenticate.py to authenticate with Garmin Connect.
China Region Issues
# Verify config
cat ~/.garmin-health-report/config.json
Should show: {"is_cn": true, ...}
Clear tokens and re-authenticate
rm ~/.garmin-health-report/tokens.json
python3 authenticate.py