Skip to content

❤️ Health Exporters

Host: Homelab · Compose: Homelab/Docker/health/compose.yaml
Stack name: health


1. Overview

Two health data exporters that pull personal health metrics from Fitbit wearables and ResMed CPAP devices, then push them to an InfluxDB instance for long-term storage and Grafana dashboards.


2. Architecture & Services

Service Image Port Role
fitbit-fetch-data thisisarpanghosh/fitbit-fetch-data Polls Fitbit API for health metrics (steps, sleep, HR etc.) and writes to InfluxDB 2
resmed-influx vdbg/resmed-influx:1.3 Pulls ResMed myAir CPAP data and writes to InfluxDB

3. Networking

No custom networks — both containers access InfluxDB at http://192.168.10.127:8086 directly over the host network.


4. Persistent Storage

Container Host Path Description
fitbit-fetch-data /docker/data/health/fitbit/logs Fitbit fetch log files
fitbit-fetch-data /docker/data/health/fitbit/tokens OAuth2 token cache for Fitbit API
resmed-influx /docker/data/health/resmed/config.toml ResMed credentials and InfluxDB config

5. Environment Variables

Variable Service Description
INFLUXDB_URL fitbit-fetch-data InfluxDB endpoint (http://192.168.10.127:8086)
INFLUXDB_BUCKET fitbit-fetch-data Target bucket (Fitbit)
INFLUXDB_ORG fitbit-fetch-data InfluxDB org name
INFLUXDB_TOKEN fitbit-fetch-data InfluxDB write token
CLIENT_ID fitbit-fetch-data Fitbit OAuth2 Client ID
CLIENT_SECRET fitbit-fetch-data Fitbit OAuth2 Client Secret
DEVICENAME fitbit-fetch-data Device label (Pixel Watch 3)
AUTO_DATE_RANGE fitbit-fetch-data Enable bulk historical import
ResMed config resmed-influx Loaded from /docker/data/health/resmed/config.toml

6. Access & Usage

These are headless data collectors — no web UI. Data is visible via Grafana dashboards connected to InfluxDB.

# Start
docker compose -f Homelab/Docker/health/compose.yaml up -d

# Check Fitbit logs
tail -f /docker/data/health/fitbit/logs/fitbit.log

# Restart to trigger a fresh data pull
docker restart fitbit-fetch-data

7. Maintenance & Backup

# Update
docker compose -f Homelab/Docker/health/compose.yaml pull
docker compose -f Homelab/Docker/health/compose.yaml up -d

# Backup
rsync -av /docker/data/health/ /backup/health/

[!NOTE] The Fitbit OAuth2 token in /docker/data/health/fitbit/tokens must be kept intact. If it's lost, you'll need to re-authenticate via the Fitbit OAuth flow.