Es ist fast ein Jahr her, seit ich angefangen habe, Fitbit zu verwenden, aber ich habe die API nicht so sehr berührt, weil ich nur das Zifferblatt und die Apps entwickelt habe, und aufgrund meiner eigenen Forschung habe ich diesmal versucht, Aktivitätsdaten in Echtzeit zu erfassen. Es war.
Es war in Ordnung, in die Datenbank zu schreiben, aber ich entschied mich, schnell auf das Blatt zu schreiben, da mein Wissen immer noch auf der Babyebene liegt. (Ich möchte bald lernen)
Der Grund, warum (?) Nach der Echtzeit hinzugefügt wird, wird später erläutert. ..
Grob teilen und mit dem folgenden Verfahren fortfahren.
Ich werde sofort fortfahren!
Dies ist eine weitere Energieanwendung von Anfang an, die sich jedoch auf den Artikel [hier] bezieht (http://sakanaaas.hateblo.jp/entry/2017/03/19/215758).
Bitte holen und einstellen. Meine App-Registrierungseinstellungen lauten übrigens wie folgt.
Artikel | Eingaben eingegeben |
---|---|
Application Name | HeartRate Watcher |
Description | watch my heart rate |
Application Website | http://localhost/ |
Organization | personal |
Organization Website | http://localhost/ |
OAuth 2.0 Application Type | Personal |
Callback URL | http://127.0.0.1:8080/ |
Default Access Type | Read-Only |
get_hr.py
import fitbit
from ast import literal_eval
CLIENT_ID = "XXXXXX"
CLIENT_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
TOKEN_FILE = "token.txt" #Im selben Verzeichnis.Machen Sie txt
tokens = open(TOKEN_FILE).read()
token_dict = literal_eval(tokens)
access_token = token_dict['access_token']
refresh_token = token_dict['refresh_token']
def updateToken(token):
f = open(TOKEN_FILE, 'w')
f.write(str(token))
f.close()
return
authed_client = fitbit.Fitbit(CLIENT_ID, CLIENT_SECRET, access_token=ACCESS_TOKEN, refresh_token=REFRESH_TOKEN, refresh_cb=updateToken)
Sobald der "authed_client" genehmigt wurde, können Sie die Daten nach Belieben abrufen.
Dies ist das Ende von STEP1.
Da Python in die Tabelle schreibt, registrieren wir hier auch die API.
STEP2 hat auch eine sehr sehr höfliche Erklärung unter hier, stellen Sie sie also beim Lesen ein.
get_hr.py
import gspread
import json
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('************.json', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = '******************'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
Sobald Sie die oben genannten Informationen registriert haben, können Sie so viel lesen und schreiben, wie Sie möchten!
Ich würde gerne sagen, aber da es ein ** Anforderungslimit von 100 pro 100 Sekunden ** gibt, werde ich unerwartet erwischt. Es wird als eine Anforderung für jede Erfassung oder Aktualisierung des Zellenwerts betrachtet. Vermeiden Sie daher wiederverwendbare Stellen und zusätzliches Schreiben so weit wie möglich. (Ich weiß nicht, ob es mir gut geht.)
Dies ist das Ende von STEP2.
Nach der Registrierung verschiedener Informationen ist es endlich Zeit, die Daten abzurufen.
data_sec = authed_client.intraday_time_series('activities/heart', 'YYYY-MM-DD', detail_level='1sec')
heart_sec = data_sec["activities-heart-intraday"]["dataset"]
Stellen Sie das Datum der Daten, die Sie erfassen möchten, mit "JJJJ-MM-TT" und das Datenintervall mit "detail_level" ein.
detail_level
kann aus [1sec, 1min, 15min] ausgewählt werden.
heart_sec enthält die Herzfrequenz in Form von "{Zeit: mm: hh: ss, Wert: **}". Sie können es so lassen, wie es ist, aber ich wollte Datumsinformationen hinzufügen, deshalb habe ich es vor der Ausgabe ein wenig wie folgt geändert.
def get_heartrate_data(date):
data_sec = authed_client.intraday_time_series('activities/heart', date, detail_level='1sec')
heart_sec = data_sec["activities-heart-intraday"]["dataset"]
for data in heart_sec:
datetime = date + " " + data['time']
data['datetime'] = datetime
del data['time']
return heart_sec
Danach werde ich es auf das Blatt werfen, also belasse es im JSON-Format.
Dies ist das Ende von SCHRITT 3.
Es gibt auch Personen, die die Erfassungsmethode sorgfältig zusammengefasst haben. Wenn Sie also eine andere Methode als die Herzfrequenz ausprobieren möchten, lesen Sie bitte hier. ..
Der letzte Schritt ist das Schreiben auf das Blatt.
Erstellen Sie eine Liste der Daten, die Sie eingeben möchten, und werfen Sie sie nacheinander. Es ist gut, append () zu verwenden, um in die letzte Zelle zu schreiben, also überlasse ich alles Ihnen.
headers = ['value', 'datetime'] # keys
def set_data_to_sheet(datas):
for data in datas:
column = []
for header in headers:
column.append(data[header])
worksheet.append_row(column)
Erstellen Sie nach Abschluss der obigen Vorbereitungen eine job () - Funktion für die regelmäßige Ausführung.
def get_latest_data(data):
list_num = len(data)
new_list = []
for i in range(list_num-30, list_num):
new_list.append(data[i])
return new_list
def job():
now = datetime.datetime.now()
date = now.strftime('%Y-%m-%d')
data = get_heartrate_data(date)
latest_data = get_latest_data(data)
set_data_to_sheet(latest_data)
Holen Sie sich einfach die letzten 30 Daten mit der Datumseinstellung "get_latest_data" und schreiben Sie sie auf das Blatt.
Danach wird, um eine ** Echtzeit ** -Erfassung zu realisieren, diese regelmäßig alle 30 Sekunden von cron usw. ausgeführt. Da die Grenze der Fitbit-API bei 150 Zugriff / 1H liegt, wird sie mit einem kleinen Spielraum festgelegt.
** Echtzeit-Herzfrequenz kann erhalten werden !! **
Es lief nicht gut und das Ergebnis war wie folgt. .. (Auszug aus 1 Exemplar)
Es wurde erwartet, dass es alle 30 Sekunden aktualisiert wird, aber die Aktualisierung der neuesten Informationen verzögert sich um etwa 15 Minuten. Relevant ist hier die Spezifikation zum Daten-Upload. Da Sie von fitbit aus keine direkte Verbindung zur Cloud herstellen können, müssen Sie Ihr Smartphone während der Kommunikation einmal durchlaufen. Es scheint jedoch, dass Fitbit und das Smartphone nur in Intervallen von etwa 15 Minuten synchronisiert werden. Ich denke, dieses Problem tritt auf. (Die Synchronisation ist immer eingeschaltet, aber es ist ein Gleichgewicht mit verschiedenen Batterien)
Auf diese Weise scheint die Echtzeiterfassung in 30-Sekunden-Intervallen mithilfe der API bisher streng zu sein, daher habe ich sie wie folgt geändert.
Wenn Sie die Situation organisieren
heart_sec
ansehen, wird die Herzfrequenz ungefähr alle 5 Sekunden aufgezeichnet (sie sollte alle 1 Sekunde eingestellt werden, kann aber nicht häufig behoben werden).
-Das heißt, etwa 12 Mal pro Minute aufnehmenDaher werden zum Zeitpunkt des Hochladens der neuesten Informationen 12 x 15 = etwa 180 Datensätze akkumuliert.
Schreiben Sie dann 180 Daten, indem Sie cron alle 15 Minuten ausführen!
Ich dachte, aber hier stecke ich mit ** 100 Anforderungslimit pro 100 Sekunden ** fest.
Ich habe versucht, 180 Daten gleichzeitig zu schreiben, war aber begrenzt. (Natürlich) Also schaffte ich es, mit der Krafttechnik, jedes Mal, wenn ich schrieb, 1 Sekunde lang zu schlafen, die Grenze zu überschreiten. (Es dauert sehr lange) (Das Werfen in die Datenbank ist überwältigend intelligenter.)
Schließlich konnte ich Daten nicht sofort abrufen und schreiben "Einmal alle 15 Minuten werden in 180 Sekunden 180 nicht hochgeladene Daten auf das Blatt geschrieben." Es wurde ein sehr klobiges System.
Da das Blatt die Daten jedoch ohne Erlaubnis aufzeichnet, scheint es, dass sie für irgendeine Art von Analyse verwendet werden können.
Alles was Sie tun müssen, ist auf das Blatt zu schreiben und Sie können es sofort visualisieren. Ich meine, auch wenn Sie es nicht schreiben, können Sie ein Diagramm einfacher erstellen, indem Sie es in einen DataFrame konvertieren. Daher werde ich die Details hier weglassen.
Das folgende Beispiel zeigt 24 Stunden Herzfrequenz pro Tag. Sie können sehen, dass die Herzfrequenz von Mitternacht bis zum frühen Morgen bei tiefem Schlaf niedrig ist und nach dem Aufwachen allmählich ansteigt.
Wenn Sie es ordnungsgemäß in der Datenbank verwalten, können Sie coole und dynamische Diagramme erstellen. Dies ist also ein zukünftiges Problem.
Wir haben eine Reihe von Schritten ausgeführt, z. B. das Festlegen verschiedener APIs, das Erfassen von Fitbit-Informationen, das Schreiben auf ein Blatt und das Visualisieren.
Es war nicht gerade in Echtzeit, aber ich möchte ein intelligentes Visualisierungssystem und interessante Apps erstellen, die sogar 15-Minuten-Intervalle tolerieren können.
Zusätzlich zur Herzfrequenz können Sie Kalorien, Schritte, Schlaf usw. aufzeichnen. Probieren Sie es also sowohl für Fitbit-Benutzer als auch für Nicht-Fitbit-Benutzer aus!
Recommended Posts