Clawdbot ToolsDocumentedScanned

garmin-connect-fixed

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

Share:

Installation

npx clawhub@latest install garmin-connect-fixed

View the full skill documentation and source below.

Documentation

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

  • Sync your Garmin device with the Garmin Connect app

  • Wait 2-3 minutes for data to sync

  • Check that data appears in Garmin Connect web/app

  • 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']:,}")

    MIT — Use, fork, modify freely.


    Made for [Clawdbot]() | Available on [ClawdHub]()