I have a FitBit Ultra (which I have discussed before) that I use to keep track of my daily activity, trying to force myself into higher and higher numbers, toward the AHA-suggested 10,000 steps per day.
In all honesty, I have dropped my personal goal from 10,000 steps to 6000, because 6000 is an amount that I can adjust my day to get, while I have to spend hours of my evening walking around to get myself up to 10,000. With 6000, I have a lower barrier, so I don't beat myself up with disappointment as easily. I still do, because I still have <3000-step days, but with 6000, I feel I have a fighting chance.
I have a FitBit but I don't pay for the upgraded API, but I can check every hour. And now I do.
In all honesty, I have dropped my personal goal from 10,000 steps to 6000, because 6000 is an amount that I can adjust my day to get, while I have to spend hours of my evening walking around to get myself up to 10,000. With 6000, I have a lower barrier, so I don't beat myself up with disappointment as easily. I still do, because I still have <3000-step days, but with 6000, I feel I have a fighting chance.
I have a FitBit but I don't pay for the upgraded API, but I can check every hour. And now I do.
#!/usr/bin/env python
from oauth import oauth
import datetime
import httplib
import os
import pymongo
import simplejson as json
import time
import fitbit
import locked
import pushover as p
def main():
checker = locked.locked() # determines if screen is locked
if not checker.is_locked():
from pymongo import MongoClient # connect to mongodb
client = MongoClient() # connect to mongodb
db = client.fitbit # connect to fitbit DB
reads = db.daily_reads # connect to collection
now = datetime.datetime.now() # what time is now?
datestr = now.strftime("%Y-%m-%d") # now in date format
isostr = now.isoformat() # now in ISO format
fb = fitbit.make_class() # connect
fbr = fb.activities_date_json( datestr ) # get updates
summary = fbr['summary'] # get summary
steps = summary['steps'] # pull out steps
new_read = {} # create new read
new_read["date"] = datestr # date == datestr
new_read["time"] = isostr # time == ISO
new_read["steps"] = steps # steps is steps to date
if 0 == reads.find( { "date" : datestr } ).count(): # if nada
for read in reads.find(): # clear out
id = read["_id"]
reads.remove( { "_id" : id } )
reads.insert( new_read ) # insert
else:
old_read = reads.find_one()
delta_steps = new_read["steps"] - old_read["steps"]
if delta_steps < 100:
msg = "You took " + str(delta_steps)
msg = msg + " steps in the last hour. "
msg = msg + "Go take a walk."
pu = p.pushover()
pu.send_message( msg )
id = old_read["_id"]
reads.update( { '_id' : id } , new_read )
if __name__ == '__main__':
main()
There are three modules that are mine: the fitbit module which comes from my fitbit_tools repository; locked module which uses
Similarly, perhaps this task is better suited to a key-value store like Redis than MongoDB's document store. At most I'm having one entry per day and the first entry of a day clears out all previous entries.
But, notwithstanding all the perhaps-suboptimal design decisions, this is an example of how coding and quantifying yourself can help you improve your life.
xscreensaver-command to determine if the screen is locked (if I'm not at my desk, my step counter isn't being updates; and pushover, which uses the Pushover service to keep me informed. I could and maybe should have it do speech with Festival or pop to my screens with Notify or Snarl, which also are desktop-centered tools, but this is what I have.Similarly, perhaps this task is better suited to a key-value store like Redis than MongoDB's document store. At most I'm having one entry per day and the first entry of a day clears out all previous entries.
But, notwithstanding all the perhaps-suboptimal design decisions, this is an example of how coding and quantifying yourself can help you improve your life.

No comments:
Post a Comment