睡眠時間をダッシュボードで表示する(Misfitアプリ版→IFTTT→Airtable→Lambda→PostgreSQL→Metabase)

睡眠時間がダッシュボードで表示できるようになりました!わーい( ´ ▽ ` )ノ
f:id:hiroga_cc:20180214061005p:plain

以下、要素技術の説明。

Misfitアプリ版

Misfit

Misfit

  • MISFIT WEARABLES CORPORATION
  • ヘルスケア/フィットネス
  • 無料

なぜMisfitか?それは...
1. アプリ単体(重要)で睡眠時間を計測でき、かつクラウド上に保存してくれる
2. しかもIFTTTでアクセスできる

この二つの要件を満たすのが、自分の観測範囲ではMisfitしかなかったんですね。
なお2018年2月現在iOS HealthCareには同期してくれませんが、IFTTTをかませば可能です👌

Airtable

GoogleSpreadSheetのUIとREST APIを標準装備したクラウド上のリレーショナルデータベースと言えば分かりやすいだろうか。
当然IFTTT連携OK。

で、テーブルをMisfitのデータに合わせてこんな感じで設定します。 f:id:hiroga_cc:20180214061535p:plain

ポイント:
* テーブル名、シート名は任意だが、後でIFTTTから参照するときに使うので注意。
* 明らかな数字以外は全て文字列型に設定しておくこと。日付っぽいデータだからと日付型にするとエラーで泣きを見る。
* Misfitが標準で書き込むデータの他に一つ列を追加する。(これだと"ParsedDate")"TimeAwoken"をプログラムで扱いやすい日付に変更するため。

"ParsedDate"列の関数の中身はこんな感じ。

DATETIME_PARSE(TimeAwoken, 'YYYY-MM-DD HH:mm') 

IFTTT

こんな感じに。 f:id:hiroga_cc:20180214071815p:plain

Record Contentはこんな感じ。

::airtable::SleepStart::{{SleepStart}} ::airtable::TimeAwoken::{{TimeAwoken}} ::airtable::TotalTimeSlept:: {{TotalTimeSlept}} ::airtable::TotalTimeOfRestfullySlept::{{TotalTimeOfRestfullySlept}} ::airtable::TotalTimeSleptInSeconds::{{TotalTimeSleptInSeconds}} ::airtable::TotalTimeOfRestfullySleptInSeconds::{{TotalTimeOfRestfullySleptInSeconds}}

Lamnda(とそれ以降)

ソース置いておきます( ´ ▽ ` )ノ github.com

楽しいのでぜひ〜。