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 については、以下の記事が参考になります。
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 になることがあるります。平均値を算出する際に不要なデータが含まれないよう、グラフ用のモデルと平均値の算出用のモデルをわけています。
Discussion