Garmin Connect

Garmin Connect integration for Clawdbot: sync fitness data (steps, HR, calories, workouts, sleep) every 5 minutes using OAuth.

Rayleigh3105

@rayleigh3105

What This Skill Does

Syncs Garmin fitness data (steps, heart rate, calories, workouts, sleep) into Clawdbot every 5 minutes using OAuth. Includes one-time authentication and local caching for fast access.

Replaces manual data exports from Garmin Connect by automating continuous syncing of all key fitness metrics into Clawdbot.

When to Use It

  • Track daily step count and resting heart rate in Clawdbot dashboards
  • Log sleep duration and quality breakdown automatically each morning
  • Sync recent workout details (type, distance, calories) for fitness logging
  • Monitor active minutes and distance trends over time
  • Combine Garmin activity data with other health metrics in Clawdbot automations

Install

$ openclaw skills install @rayleigh3105/garmin-connect

Garmin Connect Skill

Sync all your Garmin fitness data to Clawdbot:

  • ๐Ÿšถ Daily Activity: Steps, heart rate, calories, active minutes, distance
  • ๐Ÿ˜ด Sleep: Duration, quality, deep/REM/light sleep breakdown
  • ๐Ÿ‹๏ธ Workouts: Recent activities with distance, duration, calories, heart rate
  • โฑ๏ธ Real-time sync: Every 5 minutes via cron

Quick Start

1. Install Dependencies

pip install -r requirements.txt

2. OAuth Authentication (One-time)

python3 scripts/garmin-auth.py your-email@gmail.com your-password

This saves your OAuth session to ~/.garth/session.json โ€” fully local and secure.

3. Test Sync

python3 scripts/garmin-sync.py

You should see JSON output with today's stats.

4. Set Up 5-Minute Cron

Add to your crontab:

*/5 * * * * /home/user/garmin-connect-clawdbot/scripts/garmin-cron.sh

Or manually:

*/5 * * * * python3 /home/user/garmin-connect-clawdbot/scripts/garmin-sync.py ~/.clawdbot/.garmin-cache.json

5. Use in Clawdbot

Import and use in your scripts:

from scripts.garmin_formatter import format_all, get_as_dict

# Get all formatted data
print(format_all())

# Or get raw dict
data = get_as_dict()
print(f"Steps today: {data['summary']['steps']}")

Features

โœ… OAuth-based (secure, no password storage) โœ… All metrics: activity, sleep, workouts โœ… Local caching (fast access) โœ… Cron-friendly (5-minute intervals) โœ… Easy Clawdbot integration โœ… Multi-user support

Data Captured

Daily Activity (summary)

  • steps: Daily step count
  • heart_rate_resting: Resting heart rate (bpm)
  • calories: Total calories burned
  • active_minutes: Intensity minutes
  • distance_km: Distance traveled

Sleep (sleep)

  • duration_hours: Total sleep time
  • duration_minutes: Sleep in minutes
  • quality_percent: Sleep quality score (0-100)
  • deep_sleep_hours: Deep sleep duration
  • rem_sleep_hours: REM sleep duration
  • light_sleep_hours: Light sleep duration
  • awake_minutes: Time awake during sleep

Workouts (workouts)

For each recent workout:

  • type: Activity type (Running, Cycling, etc.)
  • name: Activity name
  • distance_km: Distance traveled
  • duration_minutes: Duration of activity
  • calories: Calories burned
  • heart_rate_avg: Average heart rate
  • heart_rate_max: Max heart rate

Cache Location

By default, data is cached at: ~/.clawdbot/.garmin-cache.json

Customize with:

python3 scripts/garmin-sync.py /custom/path/cache.json

Files

FilePurpose
garmin-auth.pyOAuth setup (run once)
garmin-sync.pyMain sync logic (run every 5 min)
garmin-formatter.pyFormat data for display
garmin-cron.shCron wrapper script
requirements.txtPython dependencies

Troubleshooting

OAuth authentication fails

  • Check email/password
  • Disable 2FA on Garmin account (or use app password)
  • Garmin servers might be rate-limiting โ€” wait 5 minutes

No data appears

  1. Sync your Garmin device with the Garmin Connect app
  2. Wait 2-3 minutes for data to sync
  3. Check that data appears in Garmin Connect web/app
  4. Then run garmin-sync.py again

Permission denied on cron

chmod +x scripts/garmin-cron.sh
chmod +x scripts/garmin-sync.py
chmod +x scripts/garmin-auth.py

Cache file not found

Run garmin-sync.py at least once to create cache:

python3 scripts/garmin-sync.py

Usage Examples

from scripts.garmin_formatter import format_all, get_as_dict

# Get formatted output
print(format_all())

# Get raw data
data = get_as_dict()
if data:
    print(f"Sleep: {data['sleep']['duration_hours']}h")
    print(f"Steps: {data['summary']['steps']:,}")

License

MIT โ€” Use, fork, modify freely.


Made for Clawdbot | Available on ClawdHub

Top skills in this category