🛌

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

に公開

睡眠の健康状態を測るために Fitbit を使い始めて 1 年以上になります。Fitbit では睡眠ステージの推移などある程度のグラフはアプリで確認できますが、睡眠中に起きた回数を確認したいと考えました。[1] そのため、Fitbit の API を利用してデータを取得し、SharePoint リストに格納して Power BI から参照できるようにしました。

実際に作成したレポートは次のようになります。

Power Automate の全体像は次のとおりです。少し長いため、画面を分割して掲載しています。

Fitbit API へのアクセスには OAuth を使用しますが、Fitbit では Client Credentials フローがサポートされていません。そのため、事前に Authorization Code でリフレッシュ トークンを取得しておきます。Power Automate ではリフレッシュ トークンからアクセス トークンを再取得するようにします。[2] Fitbit の Authorization Code Flow については、以下の記事が参考になります。

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

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 でエンコードしています。

アクセス トークンを取得した後、Sleep API を呼び出します。データは日付ごとに取得できるため、当日の日付を指定します。

睡眠は複数回行われる場合があるため、データは配列として取得されます。配列をループ処理し、それぞれの起きた回数を加算します。

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

Power BI では特別な処理は行っていませんが、Fitbit でデータの取得漏れや計測がうまくいかず、値が 0 になることがあるります。平均値を算出する際に不要なデータが含まれないよう、グラフ用のモデルと平均値の算出用のモデルをわけています。

脚注
  1. Fitbit によると健康な人でも 1 回の睡眠で 10~30 回は起きているそうです。 ↩︎

  2. 厳密には Client Credentials でトークン自体は取得できますが、API を呼び出すとアクセス許可がないというエラーになります。 ↩︎

Discussion