I find myself in the position of wanting to automatically beemind my workout routine, but am having trouble doing so and wondering if you have suggestions.
I use an app called Sworkit on Android: https://play.google.com/store/apps/details?id=sworkitapp.sworkit.com&hl=en , https://sworkit.com/ .
The app has good ratings and an exercise program I like, but honestly seems kind of crappy and poorly maintained on a technical level (I suspect it was outsourced and hasn’t been updated since.) The app can call out to partner integrations when an exercise is completed; the MyFitnessPal integration works and I use it, as does the Google Fit integration; a big collection of other integrations seems to be rather second-class (they are listed as “more apps” powered by “Human API”), and the most promising one for syncing, “MapMyFitness”, gives only “partner sync error” when I try using it. There is also a ‘share this workout’ button at the end of each workout, which allows me to share it via an Android intent; I would consider this automatic enough if there was an intent that would send it to beeminder to be counted.
Beeminder obviously can’t sync directly from Sworkit; it can sync from various things that Sworkit claims to be able to sync to, but the integrations on beeminder’s end generally only take the primary metric from a platform (e.g. even if it worked, syncing my workouts to fitbit doesn’t help, because beeminder only syncs steps from fitbit.) The most promising beeminder integrations seem to be IFTTT and Zapier, but they don’t seem to quite have what I need; Zapier can connect to MapMyFitness, but since I can’t get Sworkit to sync there without error, it doesn’t help.
I’m willing to run apps on my phone, even as root (it’s a rooted device); I’m willing to run something on Heroku and give it my MFP credentials; I am willing to write code as long as it’s not likely to require a lot of maintenance effort.
[Note: This was originally an email to firstname.lastname@example.org, but it was suggested that I put it here instead, so everyone can make and benefit from suggestions.]
The https://beemind.me/ service can connect Google Fit to Beeminder.
I have not used it though, so I cannot speak to its effectiveness.
Hmm, thanks, that’s interesting. I confess that even after investigating them, I don’t really understand Google Fit or beemind.me very well. The latter looks to support a set of exactly 5 Google Fit metrics (and 15 more individual metrics from other apps) – is that all it does? The only thing it offers that I figure might be synced from exercise apps is “Strength Training Minutes”, but I can’t get Google Fit itself (which seems to have only an app, and no website?) to show me any statistic like that at all, so I’m not sure whether it even exists anymore. All the app will show me is things that Google Fit itself records, which is all duplicative of the things I’m already using Fitbit for.
Come to think of it, it’s not clear that Sworkit even has enough information to sync to Google Fit – I can’t get it to give me any kind of permission or account prompt. Maybe I gave it once and it’s cached, who knows. EDIT: Ooh, but Sworkit shows in Google Fit settings as a ‘connected app’, so clearly something worked at some point. I guess I’ll let it do its thing and see if anything shows up in Beeminder?
Hmm, is there any way to restart a failed $0 goal and keep it at $0? I’d like to try to get this integration issue worked out without creating dozens of new goals as I experiment. I thought I had set a pledge cap at $0 before it died, but perhaps that’s not supported? I’m on some subscription plan that used to let me do things like this with impunity but I haven’t paid much attention to how the plans have evolved.
Yeah, just send an email to support about it, and they’ll fix it for you.
For that matter, you might get one from them to make sure that the derailment was actually supposed to occur, especially with new goals.
Ok, it seems like ‘strength training minutes’ is not hooked up to anything – I can get Fit to show synced workout minutes to me in the app but they just show up as ‘other’, and beemind.me doesn’t see them.
I could use beemind.me with ‘active minutes’ but that counts both synced workout minutes and any minutes that Fit thinks I’m walking because my phone is moving (which I don’t know how to disable, but perhaps I will try uninstalling the Fit app.)
In the Fit app settings, there is a switch to turn off Activity detection. Does that work?
Yeah I just found that, thanks! I’m testing it now. It seems like it will work!
In case this is still useful, here was how @bee and I each initially answered this in support (amusingly, we answered simultaneously without noticing the other was doing so):
Hi Glenn! I’m rusty on this part but it sounds like with the Android Intent thing that this could work via our Tasker integration. http://blog.beeminder.com/beedroid/
And we do have a ton of Fitbit metrics, not just steps. If we don’t currently have “number of workouts” it might be easy to add…
Also, you can maybe do Google Fit via beemind.me
so many possibilities!
Hmm. Premilinary ideas: I thought we had some hook in our android app that might make the intent thing work… like I think that’s how we get data from the android tagtime app… but maybe that’s at the “i’m developing an app that i want to send to beeminder” level… Our Runkeeper integration does track number of workouts as a metric if Runkeeper were one of the things that sworkit can connect to. And we implemented macros  on our IFTTT channel that might let you transform / fiddle data if you can get sworkit to send to something that has an IFTTT channel.
 IFTTT Macros
Hm, so now in beemind.me, on the page for the integration, I see “current score”, and a big table of timestamps and (apparently correct) values for the total time active during that hour. But it’s been a number of hours since I set it up, and I synthesized some activity after setting it up, and still the “Last score” on the homepage for that integration is “none” and there are no datapoints in Beeminder.
It’s possible I just need to wait 24h or something for it to figure itself out, but it’s pretty opaque.
EDIT: … huh, after writing that I synthesized a bit more data, whacked ‘refresh’ a couple more times, and suddenly a bunch of datapoints came pouring out. I guess we’ll see what it does from here on out if left alone.
In case it helps, Zapier also connects to RunKeeper
Beemind.me seems to have a lot of trouble consistently getting data where it needs to go… is there someone here associated with it, who could help me figure out why? E.g. I exercised about 4 hours ago, which Google Fit knows about, but beemind.me does not see it yet, and it seems like I have no way to debug why not.
@gwillen Next time you see delays, you can compare https://fit.google.com to http://beemind.me. Both apps use the same data source so they should be the same. If data doesn’t appear in google’s own web app the synchronization between you phone and google might be the cause of the delay. beemind.me reports changes to beeminder every round hour, if it shows the data on the goal page but doesn’t report it might indicate a problem. You can try to click “reload” button manually, that will trigger the sync process from beemind.me to beeminder.
Yesterday I moved the server to a different datacenter and had a problem with the deployment. That would explain some of the delays. Shouldn’t happen again.
Thanks for the info! I believe I’m seeing two separate problems here:
(1) Google Fit not syncing – it seems like Sworkit actually reports data to gfit locally on the phone somehow, which gfit then has to sync to the cloud. I can fix this by manually killing the gfit app if it’s having problems.
(2) Beemind.me having the data (showing in “current score” as the most recent item, but not showing as “last score” on the main page, which shows an older datapoint) but not syncing it to Beeminder for a long time or ever. It would be nice if I didn’t have to hit ‘reload’ to force the sync every time – what normally triggers the sync, and why might it not happen for a long time? My latest datapoint is from this morning, forced it to sync to gfit probably 2+ hours ago, but beemind.me is still not sending it to beeminder. Might it get confused if it doesn’t get a datapoint until after the hour containing that datapoint is already over? E.g. the datapoint shows as “2017-02-07 18:00:00 UTC / 0.133333333333333”, which I believe is gfit’s timestamp, hours before beemind.me finally got its hands on the datapoint.
Thanks again for your help!
Thanks for the help debugging the issue. You don’t have to click reload for it to work. I just had some problems with the move to the new datacenter. Sorry about that. The data should be synced between minute 55 and 59 of each hour. Let me know if you encounter this problem again.
Final update: This seems to be working well, thanks again everyone! The primary problem with it is that Google Fit seems to sync at most once a day, and not at a reliable time, and can’t be prodded to sync on demand. I think this is probably ok, but if it becomes a problem I might look for another way to hook this up.
Thanks @galtsubery for your help especially!
I’m about to embark on my own attempt to wire Sworkit up to Beeminder. I would like to Beemind total time spent in Sworkit workouts. So I just want to confirm that the route taken here was to use Google Fit instead of Sworkit’s data?
It looks like Sworkit on Android can “share” messages like
I just had an intense $DURATION minutes of $WORKOUT_NAME #fitnessmotivation #sworkit
so I am thinking about sending them via email to an addressed processed by Zapier. I feel like this would be easier than trying to get Tasker to understand it locally. Thoughts?
The route I took here was to hook up Sworkit to Google Fit, then to hook up Google Fit to Beeminder via Beemind.me. I forget how all those connections worked exactly, and they were kind of brittle so I can’t promise it will still work as I haven’t used Sworkit in quite awhile. But the way I had it set up, Sworkit data did eventually make it to Beeminder.