• author
    • Vinzenz Haas

      Informationtechnology
    • 20. Mai 2014 in Technology

    Fitbit – Tracker – Auslesen der eigenen Bewegungsdaten über die Fitbit-API

    Fitbit – Der kleine Bewegungs-Tracker

    fitbit_theoneFitbit ist ein kleiner Bewegungssensor der in der Hosentasche bzw. am Gürtel befestigt wird. Es gibt davon bereits mehrere Ausführung als Clip oder als Armband. Im Kern sitzt ein 3-dimensionaler Accelerometer welcher Bewegungen in alle Richtungen wahrnimmt. Dadurch kann neben den normalen Schritten im Flachen die zurückgelegten Höhenmeter gemessen werden. Nach unserer Erfahrung funktioniert dieser mit nur wenigen %-Abweichung von richtigen Wert. Es ist angenehm zu sehen wie viel oder wie wenig man sich wirklich an einem Tag oder über einen Zeitraum bewegt. Das bringt natürlich auch den Mehrwert von historisch vergleichbaren Daten mit sich. Aufgrund dieser Daten können persönliche Bewegungsziele gesetzt werden, welche motivierend gelten und pushen falls diese an manchen Tagen nicht erreicht wurden. Ich will hier keinen Exkurs in Stresspsychologies- und Sportmedizinisch-Aspekte machen, aber es liegt auf der Hand, dass genug Bewegung einen positiven Einfluss auf das körperliche Gesamtempfinden hat.

     

    Fitbit-Aria

    fitbit_ariaFitbit hat im Sortiment auch eine Waage die sich ins hauseigenen WLAN hängt und die Gewichtsdaten auf den jeweiligen Fitbit-Account lädt. Laut der Beschreibung erkennt die Waage unterschiedliche Personen, damit ist es möglich, dass mehrere Personen im Haushalt die gleiche Waage verwenden und diese die Daten an das dementsprechende Fitbit-Profil hochlädt.

     

    Darstellung auf fitbit.com

    Die gesammelten Daten werden in die Cloud von FitBit geladen. Dafür ist eine kleine Docking-Station zum Hochladen der Daten und Aufladen des Geräts beigelegt. Die neueren Modelle können auch mittels Bluetooth über ein Smartphone synchronisiert werden.
    Auf der FitBit-Seite gibt es einige Dashboards welche die Bewegungsdaten und noch weitere, wie Gewichtsdaten von der Aria, darstellen.

     

    Dashboards selbst gebaut

    Wir haben uns gedacht, es ist etwas „langweilig“ (damit ist gemeint es gibt keine technische Herausforderung zu meistern) die vorgefertigten Dashboards von Fitbit zu verwenden. In unserer Runde, bestehen aus 5 Leute, gibt es eine interne Fitbit-Challenge die sich über ein Monat zieht. Die Person die am meisten Schritte und Stockwerke in der Zeit zurücklegt ist der Sieger. Dafür bietet es sich an die Daten von der FitBit-Cloud anzuzapfen und eigene Darstellungen zu basteln um zu sehen wo man sich aktuell in der Challenge befindet und das auf einem Blick.

     

    Fitbit-API

    Um die Daten abzuholen muss eine Fitbit-App registriert werden. Es kann jeder Benutzer auf https://dev.fitbit.com/apps/new eine App registrieren und die zur Verfügung gestellte API verwenden. Sind die Daten in dem Formular korrekt ausgefüllt bekommt man Zugriffsschlüssel. (Client KEY und Client Secret)
    Diese Schlüssel werden für die OAuth-Authentifizierung der App benötigt. Um Zugriff auf Benutzerdaten zu bekommen muss der Benutzer der App Zugriffsrechte geben.

     

    Python Fitbit Library

    Das geschrieben Tool basiert auf der python fitbit library die von „orcasgit“ geschrieben wurde. https://github.com/orcasgit/python-fitbit python-logo github-logo
    Bis jetzt hab ich noch kein simples Tutorial gefunden, welches mit nur wenigen Schritten Daten über die Fitbit-API abholt und ausgibt. Deswegen werden in diesem Post die einzelnen Schritte detailliert beschrieben.

    OAuth Token

    Im ersten Schritt wird ein OAuth-Token und ein Link zur Authentifizierung erstellt.
    Im unten angeführten Code müssen Key und Secret von der eigens erstellten Fitbit-App eingefügt werden.
    Neben dem Link wird auch ein Token ausgegeben, welcher zusätzlich in der Datei „token.json“ gespeichert wird, da dieser im nächsten Schritt verwendet wird.

    import fitbit
    import json
    
    consumer_key = 'XXXXXXXXXXXXXX'
    consumer_secret = 'YYYYYYYYYYYYYY'
    
    client = fitbit.FitbitOauthClient(consumer_key, consumer_secret)
    token = client.fetch_request_token()
    print token
    print client.authorize_token_url()
    with open("token.json", "w") as tokenFile:
    	json.dump(token, tokenFile)
    
    

    Link für App-Berechtigungen

    Der Link ist nach folgendem Pattern aufgebaut https://www.fitbit.com/oauth/authorize?oauth_token=XXXXXXXXXXXXXXXXXXXXX und führt zur Seite auf welcher der App Erlaubnis für den Zugriff auf die Daten gegeben wird.
    Nach Klick auf den Button „Erlauben“ wird ein PIN ausgegeben. Dieser muss kopiert werden und im nächsten Schritt weiterverwendet.

    Access-Token

    Das unten angeführte Python Script muss im gleichen Ordner wie die Datei „token.json“ liegen, oder der Pfad zur Datei token.json wird angepasst.
    Der PIN vom letzten Schritt muss in das Script in der letzten Zeile eingesetzt werden.
    Nachdem das Script ausgeführt wurde, wird der Access-Token ausgegeben mit dem auf die Daten des Users zugegriffen werden können.

    import fitbit
    import json
    
    token = json.loads(open("token.json", "r").read())
    
    consumer_key = 'XXXXXXXXXXXXXX'
    consumer_secret = 'YYYYYYYYYYYYYY'
    
    client = fitbit.FitbitOauthClient(consumer_key, consumer_secret)
    print client.fetch_access_token('PIN', token)
    
    

    Dieses Script gibt die userid, usertoken und usersecret aus welches in das nächste Code-Snippet eingefügt werden müssen.

    Daten zu Schritten und Stockwerken abholen

    import fitbit
    
    consumer_key = 'XXXXXXXXXXXX'
    consumer_secret = 'YYYYYYYYYYYY'
    
    fromDate = '2014-04-01'
    toDate = '2014-04-30'
    
    userid = '1234ASDF'
    user_token = 'AAAAAAAAAAAAAAAAAAAAAAAA'
    user_secret = 'BBBBBBBBBBBBBBBBBBBBBBBB'
    
    print "Collecting userdata [userid: " + userid + "] [user_token:" + user_token + "] [user_secret: " + user_secret + "]"
    
    activities = {'steps': 'Schritte', 'floors': 'Stockwerke'}
    fb = fitbit.Fitbit(consumer_key, consumer_secret, resource_owner_key=user_token, resource_owner_secret=user_secret)
    
    for activity_key in activities.keys():
    	activity = 'activities/' + activity_key
    
    	fitbitJson = fb.time_series(activity, userid, fromDate, None, toDate)
    	print fitbitJson
    
    

    Der Output schaut in etwa wie folgt aus:

    {u'activities-floors': [{u'value': u'50', u'dateTime': u'2014-04-01'}, ...]}
    {u'activities-steps': [{u'value': u'7138', u'dateTime': u'2014-04-01'}, ...]}
    
    

     

    Ausblick

    In weiteren Post beschreibe ich die verschiedene Techologien zur Visualisierung von Daten. Darunter fallen Cyfe-Dashboards und Splunk.

    Viel Spaß!

    Wenn ihr euch eines dieser Tracker besorgen wollt, könnt ihr gleich hier unsere Affiliate-Links nutzen.

    Quelle Bilder/Logos:
    http://manjaro.org/wp-content/uploads/2013/08/github-logo.png
    http://g-ecx.images-amazon.com/images/G/01/hpc/detail-page/c26-B0077L8YOO-1-l.jpg
    https://www.python.org/community/logos/
    http://theruniverse.com/wp-content/uploads/2014/01/fitbit-one_black-burgundy-e1347847727188.jpeg
    http://picture2.cyberport.de/mall/1/pic/bild0/Bild0-428554JU99-004_250.JPG
    http://picture4.cyberport.de/mall/1/pic/bild0/Bild0-393312A619-001_250.JPG
    http://picture1.cyberport.de/mall/1/pic/bild0/Bild0-509898BT23-003_200.JPG