Power Automate と Power BI を使って Fitbit の睡眠データをビジュアル化する
睡眠の健康状態を測るために Fitbit を使い始めて 1 年以上になります。Fitbit では睡眠ステージの推移などある程度のグラフはアプリで見られるのですが、睡眠中に起きた回数 (Fitbit によると健康な人でも 1 回の睡眠で 10~30 回は起きているそうです) を見たいと思ったので、Fitbit の API を使ってデータを取り出して SharePoint リストに格納し Power BI から見られるようにしました。
実際に作ったレポートはこんな感じになります。
Power Automate の全体像はこんな感じです。ちょっと長いので画面を分割しています。
Fitbit への API へのアクセスは OAuth を使うことになりますが、Fitbit では Client Credentials によるフローがサポートされていないので、事前に Authorization Code でリフレッシュ トークンを取得しておいて、Power Automate ではリフレッシュ トークンからアクセス トークンを取り直す形になります。[1] Fitbit の Authorization Code Flow は以下の記事が参考になります。
Refresh Token は OneDrive for Business に JSON ファイルとして保存しておいてそこから読み出します。OneDrive for Business から読み込んだコンテンツはコンテンツ タイプと Base64 エンコードされたコンテンツを持つ JSON として取得されるので、JSON を解析するときは $content
を decodeBase64
する必要があります。
Refresh Token からのアクセス トークンの取得は HTTP アクションで POST 呼び出しを行います。ClientId と ClientSecret は Body のパラメーターではなく Basic 認証で送るそうで、変数として定義した ClientId と ClientSecret をコロン区切りでくっつけて Base64 でエンコードしています。
Access Token を取得したら Sleep API を呼び出します。データは日付ごとに取れるので今日の日付を指定します。
睡眠は複数回行われることがあるのでデータは配列になっています。配列を回してそれぞれの起きた回数を加算します。
最後に日付と回数を SharePoint のリストに追加して Power Automate は完成です。
Power BI ではあまり大したことはしていませんが、たまに Fitbit でデータの取り忘れがあったりうまく計測されなかったりで値が 0 になることがあり、平均を出すときに余計なデータになってしまうので、グラフとのモデルと平均を出すモデルは別にしています。
-
厳密には Client Credentials でトークンそのものは取ってこられますが API を呼び出すとアクセス許可がないといってエラーになります。 ↩︎
Discussion