💻

Power Automate と Power BI を使って Fitbit の睡眠データをビジュアル化する

2022/01/01に公開

睡眠の健康状態を測るために 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 は以下の記事が参考になります。

https://qiita.com/makopo/items/32f41128c2e055cec68f

Refresh Token は OneDrive for Business に JSON ファイルとして保存しておいてそこから読み出します。OneDrive for Business から読み込んだコンテンツはコンテンツ タイプと Base64 エンコードされたコンテンツを持つ JSON として取得されるので、JSON を解析するときは $contentdecodeBase64 する必要があります。

Refresh Token からのアクセス トークンの取得は HTTP アクションで POST 呼び出しを行います。ClientId と ClientSecret は Body のパラメーターではなく Basic 認証で送るそうで、変数として定義した ClientId と ClientSecret をコロン区切りでくっつけて Base64 でエンコードしています。

Access Token を取得したら Sleep API を呼び出します。データは日付ごとに取れるので今日の日付を指定します。

睡眠は複数回行われることがあるのでデータは配列になっています。配列を回してそれぞれの起きた回数を加算します。

最後に日付と回数を SharePoint のリストに追加して Power Automate は完成です。

Power BI ではあまり大したことはしていませんが、たまに Fitbit でデータの取り忘れがあったりうまく計測されなかったりで値が 0 になることがあり、平均を出すときに余計なデータになってしまうので、グラフとのモデルと平均を出すモデルは別にしています。

脚注
  1. 厳密には Client Credentials でトークンそのものは取ってこられますが API を呼び出すとアクセス許可がないといってエラーになります。 ↩︎

Discussion