Pythonを使用してFitbitブレスレットからデータを取得し、Grafanaでグラフを表示する

調子はどうですか? 今日は、Fitbitブレスレットを持っているすべての人がきっと興味を持つであろうドキュメントを持って行きます, あなたはすでに私たちが私たちのライフスタイルなどについてのデータを得ることができることを知っています… まぁ, この情報を活用して、美しいグラフィックで表示したい場合, これはあなたのドキュメントです! Pythonスクリプトを使用して、関心のある測定値を取得し、それらをMySQLデータベースに保存します, そして、Grafanaを使用して、興味のあるグラフィックをペイントします!

この辺りにはラズベリーパイや他のフリカダのファンも多いと思います, あなたが持っていると想像してみてください マジックミラー マウント, あなたはすでに鏡の後ろにモニターがあることを知っており、それに別のタッチを加えることによってあなたの家を自動化したいと思っています、そしてあなたが鏡で自分自身を見るとき、あなたはあなたの進歩を知っています, 走行距離, 取られたステップ, 消費 カロリー, 脈動グラフ, 登った階数… まぁ… これらの手順に従ってすべてを達成できます, いつか、自分で設定した面白いプロジェクトを家🙂に置いてみるよ

 

私が言ったこと, 必要なもの? Apache と MySQL がインストールされているサーバ, 興味のあるものを保存するデータベースを作成します (いくつかの例を見ていきます), FitbitのWebサイトに登録してアプリを作成し、Pythonスクリプトで使用するアクセストークンを取得して、Fitbitクラウドから情報をjsonファイルに吸い込み、ローカルに保存して後でDBにエクスポートする方法を確認します. その後、彼はすでにしゃぶられています, 私はあなたがすでにGrafanaをインストールしていると確信しているので (そして、あなたが見ないなら ここは), 私たちが行うことは、DBに対してMySQLクエリを作成して、見たいものを取得することです!

シナリオは非常に単純です, 毎日で Raspberry Pi 23:55h は、上記のことを行う Python スクリプトを実行します, MySQLデータベースのテーブルに毎日のデータを格納し、Grafanaがインストールされている場所からアクセスできます, 同じRaspberry Piを使用している, 別のマシンで… いつものように、私はあなたに言います, 私はプログラマーでも開発者でもありません, 誰かがクールなことをすることに興味がある場合に備えて、私がそれをどのように手に入れたかをお見せします! もちろん、他の方法もあります, しかし、これはそれほど複雑ではありません!

 

最初に行うことは、次のWebサイトにアクセスすることです。 https://dev.fitbit.com アカウントをお持ちでない場合は、アカウントを作成します, その後は, 私たちはアクセスします https://dev.fitbit.com/apps/new をクリックし、次の手順に従って新しいアプリを作成します:

  • アプリケーション名: わかりやすい名前を示します, 私の場合、Python Pi 197
  • 形容: このアプリを作業中のプロジェクトに関連付けるものを書きます.
  • アプリケーションウェブサイト: URLを入れます, たとえば、http://www.bujarra.com
  • 組織: 組織名, p. 例えば: ブハラ
  • 組織ウェブサイト: URLを再度指定します, HTTPの://www.bujarra.com
  • オウス 2.0 アプリケーションの種類: 「スタッフ」を選択します’
  • コールバック URL: 私たちはhttpを残します://google.com
  • デフォルトのアクセスタイプ: 「読み取り専用」のままであることを確認します.

 

アプリを記録し、そのプロパティで、どれが私たちのものであるかを確認できます クライアント ID そして私たちの クライアントシークレット 必要になるので、そこに書き留めておきます.

 

私たちはアクセスします https://dev.fitbit.com/apps/oauthinteractivetutorial を生成して、 アクセストークン Pythonからクエリを作成するときに自分自身を検証するために必要なことは何でしょうか. そこで、セクションにデータを入力します 1, ここで、 クライアント ID, 我が クライアントシークレット また、任意のWebサイトにリダイレクトするように指示します, 私たちは、アクセスを提供したい重要な健康に関する情報をマークします, の有効期限を指定する必要があります トークン (86400 対して 1 日 604800 対して 1 週 2592000 対して 30 日 31536000 対して 1 年), 通常のことは、 1 更新しなくても済むように年 トークン. 表示されているリンクをクリックして、新しいタブで開きます, URLをコピーします.

 

そして、その部分で 2 答えを貼り付けて、データが正しいことを確認します, もしそうなら、私たちはついに私たちの トークン!

 

したがって、Raspberryからデータにすでにアクセスできることを検証したい場合は、次のコマンドを実行して、最終日の移動距離のデータを毎分視覚化できます, すべてが正しければ、JSON形式で表示されます. 走る:

[ソースコード]curl -H "認証": ベアラー NUESTRO_TOKEN" httpsの://api.fitbit.com/1/user/-/activities/distance/date/today/1d.json[/ソースコード]

 

このウェブサイトでは、他の値や他の期間に関する詳細情報を表示するためのより多くの例があります: https://dev.fitbit.com/reference/web-api/activity/#get-daily-activity-summary.

 

そして、すべてが正しければ、それを呼ぶ小さなスクリプトを作成できます 'fitbit_carga_datos.sh‘ これは、Fitbitデータの最終日を取得します, 移動距離の両方, 取られたステップ, 階が上がった, 心拍や睡眠時間などの情報. Apacheディレクトリに残すjsonファイルに保存する情報の各タイプ, 後で必要になるので. これは、データをDBにロードするスクリプトです:

[ソースコード]# 距離
curl -H "認証": ベアラーeyJhbGxxxxxxLzI2II0" httpsの://api.fitbit.com/1/user/-/activities/distance/date/today/1d.json > /var/www/temp/fitbit_distancia.json

/usr/bin/python /home/pi/fitbit_distancia.py

# ステップス
curl -H "認証": ベアラーeyJhbGxxxxxxLzI2II0" httpsの://api.fitbit.com/1/user/-/activities/steps/date/today/1d.json > /変数/www/html/fitbit_pasos.json

/usr/bin/python /home/pi/fitbit_pasos.py

# 床
curl -H "認証": ベアラーeyJhbGxxxxxxLzI2II0" httpsの://api.fitbit.com/1/user/-/activities/floors/date/today/1d.json > /変数/www/html/fitbit_pisos.json

/usr/bin/python /home/pi/fitbit_pisos.py

# 心
curl -H "認証": ベアラーeyJhbGxxxxxxLzI2II0" httpsの://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json > /変数/www/html/fitbit_corazon.json

/usr/bin/python /home/pi/fitbit_corazon.py

# 寝る
FETXA='日付 +"%Y-%m-%d"'
curl -H "認証": ベアラーeyJhbGxxxxxxLzI2II0" httpsの://api.fitbit.com/1/user/-/sleep/date/$FETXA.json > /var/www/html/fitbit_dormir.json

/usr/bin/python /home/pi/fitbit_dormir.py[/ソースコード]

 

ご覧のとおり, 私たちは変更し、トークンを適切に配置する必要があります, Webサイトからデータをダウンロードした後、前述のようにJSONファイルに保存し、Pythonでファイルを実行して、各JSONを取得し、それを別のデータベースに挿入します.

保存して実行可能にします!

 

そこで, 分析するメトリックと同じ数のPythonスクリプトを作成する必要があります, しかし、先に進む前に、途中で立ち止まります。 データベースとテーブルを作成する 私たちが必要とするもの, これは、Pythonファイルが各jsonを対応するTABLEにインポートする場所になります. これは、HeidiSQLなどのMySQLマネージャーを介して、またはシェルで接続されたLinuxシェルから直接実行できます. 各測定に対してTABLEを作成します, 私の場合、それらはテーブルと呼ばれています: fitbit_distancia, fitbit_pasos, fitbit_dormir… そして、それらは非常に単純です, 有る 2 列, 「キロメートル」と呼ばれるもの’ (浮く) そしてもう一つは「日付」と呼ばれています’ (日付) 距離DBの場合; fitbit_pasosになります 2 列: 手順と日付, fitbit_pisos用: フロアと日付… などなど, はい? より多くの列を持つ単一のテーブルを作成することもできます, しかし、私たちはそれぞれを好きなように進めます. テーブルの作成例:

[ソースコード]テーブル 'fitbit_distancia' の作成 (
'kilometers' FLOAT NOT NULL です,
'date' 日付が NULL でない
)
照合='latin1_swedish_ci’
エンジン=イノDB
;[/ソースコード]

 

データの保存場所を定義した後, 私たちが行うことは、データを含むJSONファイルを読み取ってから、関心のある値を探して対応するテーブルに挿入してその内容を処理するPythonファイルを作成することです, 歌詞の意味: 私はそれを得た方法です。, そこで言われてきたことは、もっと良い方法があるのではないかと想像します。. Pythonファイルの1つの例を残します, この場合、彼はキロメートルを読み取り、それらをDBに入力する責任があります:

 

fitbit_distancia.py

[ソースコード]urllib のインポート
JSONのインポート
MySQLdbのインポート
db = MySQLdb.connect("localhost" (ローカルホスト),「ルート」,「パスワード」,「NOMBRE_BASE_DATOS」)
カーソル = db.cursor()

url = 'http://IP_RASPBERRY/fitbit_distancia.json’
urllib.url開く(関連URL).読む()
レスポンス = urllib.urlopen(関連URL).読む()

json_obj = json.loads(応答)

json_objの製品の場合[「アクティビティ-ディスタンス」]:
VALUE = 製品[「価値」]
DATE = 製品["dateTime" (日付時刻)]
cursor.execute("""挿入fitbit_distancia (キロメートル,日付) 価値観 (%s,%s) """,(価値,日付))
db.コミット()[/ソースコード]

だから, 最初の 'fitbit_carga_datos.sh スクリプト’ Fitbitウェブサイトの統計はJSONでダウンロードされます, そして、各PythonスクリプトはそのJSONを読み取り、対応するテーブルに入れます. より快適に, または疑問がある場合, このリンクに私のスクリプトを残します, トークンを入力して必要なテーブルを作成するだけです! そして、それを毎日実行するようにプログラムします。 23:59h, このようにして、その日のすべてのメトリクスを取得できます. en 'crontab -e’ 足す:

[ソースコード]59 23 * * * /ホーム/PI/fitbit_carga_datos.sh[/ソースコード]

 

さて、悪い点… 悪くありません, これは何をしますか? 今日だけのものを手に入れる, いいえ? そして、同期していない場合はどうなりますか? または、前回が4時間前だった場合? ええとそうです, 同期されていないデータが失われます, だからロール, いいえ? さて、私が上に置いたのは、それがどのように機能するかを理解することです. 私は本当に何をしているのか?? まあ、これに似ています, しかし、今日のメトリクスを取得する代わりに, 先週の指標をFtibitに尋ねます! などなど, はい、たとえば昨日, またはします 2 ブレスレットが同期されていない日, 大丈夫です, だって、毎晩、最後の指標を下げているんだから 7 何日も経ち、BDでそれらを粉砕します, 毎日こんな感じで, 最後の一人が降りる 7 そして問題は解決しました. はい?

だから私はあなたを去ります スクリプトは次のとおりです 私が使用しているもの, 今日だけ同期して、毎分詳細を取得することに興味がある場合… または、各日の合計にのみ興味がある場合!

 

そして、もう何もありません, 私たちは自分たちで作らなければなりません ダッシュ ボード しかし、私たちはそれらを好きです! 私が言ったこと, すでに持っているGrafanaを使用します. これは、MySQLをオリジンソースとして追加し、関心のあるクエリを作成することに他なりません. パネルを追加したり、タイプのプラグインを追加したりできます グラフ 典型的なグラフを作成します… 又は シングルスタット 値を表示するには (MySQL クエリ結果)… このスクリーンショットを見ると, 私はからのデータを表示しています 2 ブレスレット, ブルーは私、ピンクはチャバラ (そして、彼は数週間前からそれを抱えています), つまり、好きなことをすることです, はい? これらすべての最終的なアイデアは、いつの日か私があなたに見せる魔法の鏡でそれをキャプチャすることです=)

ここにいくつかあります サンプル クエリ 彼らがあなたにとって何か役立つ場合に備えて、私はGrafanaで使用しました:

ステップチャート:

[ソースコード]値としてpasosを選択, 「ステップス・ヘクター" メトリックとして, UNIX_TIMESTAMP(日付) time_sec から fitbit_pasos どこ $__timeFilter(日付) 日付ASC順に注文[/ソースコード]

距離グラフ (キロメートル):

[ソースコード]値としてキロメートルを選択, 「ヘクター" メトリックとして, UNIX_TIMESTAMP(日付) time_sec から fitbit_distancia どこ $__timeFilter(日付) 日付ASC順に注文[/ソースコード]

今週行ったキロメートルを示すSinglestat:

[ソースコード]合計を選択(キロメートル) 開始日fitbit_distancia場所(日付) >= キュラデート() – 間 7 日[/ソースコード]

 

Grafana を使用すると、次のようになります 非常に、非常に、非常にシンプルです, だから本当に, インストールしていない場合, 次のように実行します これらの指示 をクリックしてから、ダッシュボードを作成してみてください, パネルを追加して編集します (そのタイトルから), あなたはあなたが多くのオプションを持っていて、それらのすべてが非常に理解しやすいことがわかります, あなたがそれを完全にあなたの好みにカスタマイズできるように! エール, 私たちは自分の体を完全にコントロールしています! 実行するすべての手順をデータベースに保存します, 私たちが行うキロメートル, 私たちの鼓動, 私たちが眠る時間, 私たちが登る階… それを活用する時が来ました!

 

私たちはさらに別の日を続けます, 私たちが生活の中でコントロールできるかわいいものがわかります。.

 

おすすめの投稿

著者

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, 私に連絡することを躊躇しないでください, できる限りお手伝いします, シェアリングは生きていること ;) . ドキュメントを楽しむ!!!