61 lines
2.6 KiB
Bash
Executable File
61 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# ==============================================================================
|
|
# setup-garmin-cron.sh
|
|
# Declaratively registers the Garmin Connect Nightly Sync in OpenClaw.
|
|
# Schedule: Daily at 03:30 Europe/Berlin (cron: 30 3 * * *)
|
|
# ==============================================================================
|
|
|
|
set -euo pipefail
|
|
|
|
NAMESPACE="${NAMESPACE:-openclaw}"
|
|
POD_NAME="${POD_NAME:-openclaw-0}"
|
|
CONTAINER_NAME="${CONTAINER_NAME:-openclaw}"
|
|
|
|
JOB_NAME="garmin-nightly-mirror"
|
|
CRON_SCHEDULE="30 3 * * *"
|
|
TIMEZONE="Europe/Berlin"
|
|
TELEGRAM_GROUP="-1004326921510"
|
|
TELEGRAM_TOPIC="20"
|
|
|
|
echo "=== Registering Garmin Connect Nightly Sync in OpenClaw ($POD_NAME) ==="
|
|
|
|
# 1. Check if job already exists
|
|
EXISTING_ID=$(kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron list --json 2>/dev/null | python3 -c 'import sys, json; data=json.load(sys.stdin); print(next((j["id"] for j in data.get("jobs", []) if j.get("declarationKey") == "'"$JOB_NAME"'" or j.get("name") == "'"$JOB_NAME"'"), ""))' 2>/dev/null || true)
|
|
|
|
if [ -n "$EXISTING_ID" ]; then
|
|
echo "Found existing job with ID $EXISTING_ID. Removing for idempotent recreation..."
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron rm "$EXISTING_ID" || true
|
|
fi
|
|
|
|
# 2. Add the job
|
|
echo "Creating automation $JOB_NAME ($CRON_SCHEDULE @ $TIMEZONE)..."
|
|
|
|
MESSAGE=$(cat << 'EOF'
|
|
Führe den nächtlichen Garmin Connect Sync durch.
|
|
Vorgehen:
|
|
1. Führe den Garmin-Sync-Befehl aus:
|
|
uv run /home/node/mop-skills/mop-skills/skills/datastore/scripts/garmin_sync.py --days 2 --data-dir /home/node/.openclaw/wiki/main/data
|
|
2. Finale Antwort:
|
|
- Bei Erfolg: Gib exakt 'NO_REPLY' aus (intentional silence, kein Telegram-Spam in der Nacht).
|
|
- Nur bei Authentifizierungsfehlern: Informiere kurz via Telegram (Thema #Sport), dass ein Garmin-Re-Auth nötig ist, oder starte den Re-Auth-Flow.
|
|
EOF
|
|
)
|
|
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron add \
|
|
--name "$JOB_NAME" \
|
|
--declaration-key "$JOB_NAME" \
|
|
--description "Nächtlicher deterministischer Spiegel der Garmin Connect Daten (Aktivitäten, Daily Summary, Schlaf) in Git JSONL" \
|
|
--cron "$CRON_SCHEDULE" \
|
|
--tz "$TIMEZONE" \
|
|
--agent "fitness" \
|
|
--model "openrouter/deepseek/deepseek-v4.1-flash-1017" \
|
|
--session "isolated" \
|
|
--channel "telegram" \
|
|
--to "$TELEGRAM_GROUP" \
|
|
--thread-id "$TELEGRAM_TOPIC" \
|
|
--announce \
|
|
--message "$MESSAGE"
|
|
|
|
echo "=== Automation successfully registered! ==="
|
|
kubectl exec -n "$NAMESPACE" "$POD_NAME" -c "$CONTAINER_NAME" -- openclaw cron list | grep "$JOB_NAME" || true
|