Fitness for Data Junkies

I swore off of fitness data acquisition a while back. I hated the way big tech invasively mines your data, and I hated the Black Mirror-level machinations they seem to have for it.

But when I caught Covid at Def Con last year, a friend mentioned in passing that NIH was doing a Covid study and needed volunteers. I looked into it, and it seemed interesting, so I signed up. The study provided a BioStrap Evo wristband and an underarm temperature sensor. The study was gathering metrics to explore the relationships between bio data and long covid, I guess to try to create better predictions of who is at risk for long covid, etc.

It was a six-month study. The BioStrap collects interesting data, especially on sleep cycles, and I grew rather accustomed to looking at that data. I found it helpful, and started looking into the best options for collecting fitness and workout data without necessarily providing it to big tech.

Also, most of the services are subscription services, and it doesn’t make sense to me to subscribe to multiple services that essentially provide the same thing, with maybe small variations on how the data is presented.

I’m a data junkie at heart, I love having access to raw data to create my own presentations, interpretations, and correlations. I’m also a lazy engineer, so I prefer automating things up front and avoiding manual or repetitive work. So I looked forward to my options.

I wasn’t particularly fond of the BioStrap form factor, to be honest. It’s a wristband without a display, so you’re relying on the app. The bluetooth comms between the wristband and the app can be sketchy at times, requiring bluetooth resets, phone reboots, and sometimes deleting and re-adding the device profile to re-establish comms. Data is lost when that happens.

I started looking at competing products. I read a lot of good things about the Oura Ring, which I had looked at a year or so earlier, but rejected because I was still in the anti-tech-data mode. I discovered they have an API, so you have access to the data collected. So I bought one, and have been mucking with it for a couple of weeks now. The stats seem to be pretty close to what the BioStrap provided, but I like the ring form factor much better than the wristband (which makes me look like I’m wearing two watches), and the charge lasts for several days, where the BioStrap pretty much needs a charge daily.

This morning, I woke up with the intent of exploring that API a bit.

So far I’ve been able to pull in workouts for the past couple of weeks, including date, type of workout, intensity, length of workout, and calories burned (based on Oura’s calculations, of course). I’m also able to pull in the “tags,” which is sort of a custom comment field where you can add a mood, or an activity, for correlation. Some examples include noting when you drink alcohol, or getting a massage, and looking at how those activities affect your heart rate, sleep, and “recovery” level.

I’m also able to log workouts into my self-hosted Gitlab instance, which is not the best way to track workouts, but at least it accumulates time and comments. I’ve also installed a local instance of WGER, which is some odd combination of workout scheduling and “gym management.” It seems like WGER has a bit of an identity crisis going on. I tell you what, if WGER decided to go all in on allowing users to import fitness data from other apps with APIs, such as Oura, Google Fit, Strava, Apple, etc., I feel like the user base would explode.

It’ll take more time to pull in heart rate data, which seems to take averages every five minutes. That really seems to lend itself to something like MRTG, RRDTool, Grafana, etc. And the other data is in there as well. Looking at heart rate variation over time could be interesting, correlating it to workouts, sleep data, and other activities. I guarantee there are some DIY folks whose imaginations are bigger than BFT (Big Fitness Tech) when it comes to chewing on and presenting data.

But the really cool part is the automation. I’ve got it pulling the data in daily via cron job. I simply “record workout” when I start a workout, and end it when I’m done (via the phone app) and the rest of the collection and distribution of my data happens behind the scenes.