Skip to content
Splunk data from your Fitbit!
Python Shell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
app
bin
img
.dockerignore
.gitignore
CODE_OF_CONDUCT.md
Dockerfile-python
Dockerfile-splunk
LICENSE
README.md
entrypoint.sh
go.sh

README.md

Splunking Fitbit Data

Some years ago, I bought a Fitbit Charge 2 so I could track my activity. As a surprise to exactly no one, I have pretty bad sleeping habits. Fitbit's dashboard is alright, but I wanted a little more freedom to do data analytics on the data my way, and that's how this app came into being!

With Splunk Fitbit, the following metrics will be reported on:

  • Sleep data
    • Nightly hours asleep, broken down by day of week
    • "Good" sleep days ( > 7 hours of sleep) and "Bad" sleep days ( < 7 hours) by week.
    • Trending good/bad sleep days over the last 30 days
  • Heartrate data
    • Resting heartrate by day (more on how it's calculated below)
    • Trending minimum resting heartrate over the last 30 days
    • Trending maximum resting heartrate over the last 30 days

This app uses Splunk Lab, an open-source app I built to effortlessly run Splunk in a Docker container.

Screenshots

Requirements

  • Make sure Docker is installed

Running The App

  • Go to https://www.fitbit.com/settings/data/export and download your fitbit data
  • Unzip the ZIP file
  • Move your exported data into a local directory called fitbit/:
    • mv path/to/fitbit/USERNAME/user-site-export fitbit
  • SPLUNK_START_ARGS=--accept-license bash <(curl -s https://raw.githubusercontent.com/dmuth/splunk-fitbit/master/go.sh)
    • This will run a Python script which will read in the JSON data from Fitbit (both types of data are in different formats...) and write it out into a logs/ directory
    • If you want to change how many days back the script goes for either sleep or heartrate data, or change rollup values for heartrate data, add -h onto the end of that command to get syntax.
    • Then, Splunk will be started. Ingested data will be written to splunk-data/
  • Go to https://localhost:8000/, log in with the password you set, and you'll see your Fitbit data in a dashboard!

Development

Mostly for my benefit, these are the scripts that I use to make my life easier:

  • ./bin/build.sh - Build the Python and Splunk Docker containers
  • ./bin/push.sh - Upload the Docker containers to Docker Hub
  • ./bin/devel.sh - Build and run the Splunk Docker container with an interactive shell
  • ./bin/stop.sh - Stop the Splunk container
  • ./bin/clean.sh - Stop Splunk, and remove the data and logs

Notes/Bugs

  • Don't bother trying to get steps--the data in the export doesn't match what's in the dashboard at ALL. Step counts are wrong, days are missing, etc. If Fitbit fixes this, then I will add in support. :-)
  • I can't seem to get rangemaps working for nightly sleep hours, which is frustrating
  • Heartrate data has an insane volume--nearly as often as 1 reading every 5 seconds. So my import script will do rollup and output the avg/min/max/mean of all values. By default, the rollup period is 5 minutes. This can be adjusted, but may break certain assumptions in the graphs.
  • I was able to approximate, but not perfectly match Fitbit's resting heartrate as reported on my personal dashboard on the site. I ended up grabbing the 6 periods with the lowest minimum heartrate each day, and average those readings out to get a daily value. Not great, not terrible.
    • I suspect that Fitbit's readings come from having higher granularity of the data, using only readings from the deepest part of sleep, and possibly throwing in a weighted average as well.

Credits

I'd like to thank Splunk, for having such a kick-ass data analytics platform, and the operational excellence which it embodies.

Also:

Copyright

Splunk is copyright by Splunk. Apps included within Splunk Lab are copyright their creators, and made available under the respective license.

Contact

You can’t perform that action at this time.