• IoT

金曜日に届いたFitbit Inspire HRで週末2つアプリを作った話(概要編)

こんにちは、デジタル技術部の原田です。
先日の金曜日に、会社からFitbitが届いたので土日に早速ハックした内容を紹介します。
お察しの通り、先日行われた会社の健康促進企画「Fitbit争奪戦」で得た機材です。せっかく高価な機材をタダで手に入れたチャンスをいかして、FitbitのAPIまでいきなり使いこなしてやろうじゃないの、という記事です。
※ 2つありますが、妻の分です。あげないよ。 
Fitbit手に入れて会社で契約している健康管理アプリ(Pep Up)に連携させた、だけじゃつまらないじゃないですか。
どんどん技術で使い倒していきましょう。

TL;DR ※まとめです

  • 届いたFitbitを用いて、早速APIを駆使しアプリを2つ作った
  • 睡眠時間を音声で教えてくれるアプリ と 音声で体重を記録するアプリ
  • Node-REDとBeebotteはIoTの世界で使えるとても便利なプロダクト

前後半2部制で記事を書くことにします。今回はまず概要編、詳細編は主に手順について記載します。
アプリとしては出来上がっていますが、手順を含めて記事にすると長くなるためご了承ください。

制作したもの

毎朝、Fitbitを通して得たその日の睡眠時間をGoogleHomeが話しかけてくる

使用技術/機材※()内は既に存在したので使い回し。
Fitbit InspireHR、FitbitのSleep API、Node-RED、Raspberry Pi ZeroW、(Firebase)、(GoogleHome)

測った体重をGoogleHomeを通してFitbitに記録する(音声入力による記録)

使用技術/機材※()内は既に存在したので使い回し。
Fitbit InspireHR、FitbitのBody&Weight API、Node-RED、Raspberry Pi ZeroW、IFTTT、Beebotte、(GoogleHome)

2つの概要について記載しますが、ちょっとしたテーマが変わるだけで、技術的にはそれほど変わりません。読みたいテーマの方をご覧いただければと思います。

どちらもバイタルデータはFitbitのサーバにあるものを参照する形です。
ではそれぞれの仕組みについて概要を述べていきます。

毎朝、睡眠時間をGoogleHomeが話しかけてくる

はじめに

毎朝目が覚めたときに、「今日はX時間眠りました」と機械が話しかけてくれたら近未来感あるじゃないですか。
確かにFitbitを装着して就寝したうえで、朝Fitbitアプリを携帯で立ち上げて睡眠ページ画面を見に行けば情報は得られますよ。
でも何かを小さな情報を得るためだけにいちいち人間がアプリを起動するだなんて面倒ですよね。
今日はX時間しか寝てないんだ、というアピールを俺の代わりに自動で機械が実施してくれたら、
「大変だね〜」という心配を家族がしてくれるだろうしそうしたら俺が俺が嬉しいんだ!!!(錯乱
というわけで「朝に睡眠時間を語りかけてくれる仕組み」を欲しがりました。そう、私が。

前提

原田家には、Firebaseを用いることで、GoogleHomeに任意の言葉を話させる仕組みが存在します。
もうすでに動いている仕組みを活用しつつ、構築していきます。

システム構成

 

計測部分は計測機器とモバイルのFitbitアプリを通してFitbitにデータをアップロードするだけなので割愛。

赤線より上は自宅の外側(クラウド側)、下は自宅内です。
Raspberry Pi Zero Wが、毎朝7:30になったらNode-REDからFitbitのSleep APIを起動してデータを取得します。取得したデータを整形してFirebaseに通知しています。Firebaseに行けばあとはよろしく発話してくれます。Firebase以降は解説しません。

成果

ソースコードですが、実はNode-REDというGUIでコーディングできるソフトウェアをRaspberry Pi ZeroWに導入していたので、なんと成果は画像です。
これの設定などについてはまた次回。

測った体重をFitbitに記録する(音声入力による記録)

はじめに

最近原田はダイエットに取り組むため体重を記録していたのですが、Fitbitにも体重を記録できるわけです。
これもスマフォを操作して手入力でするのも面倒です。
えーい、これも音声入力とAPIだ!笑
「Ok, Google 体重測定 85.5」と言えばFitbitに記録してくれるイメージですね。活動量計じゃ体重は測れない。しゃーない。

前提

音声の入力をして何かを動かすと言っても、音声認識のところを頑張る必要はありません。
幸いIFTTTでGoogle Assistantアプリがあるため音声認識を自力で行う必要がなくなります。それを使いましょう。

システム構成

計測部分は普通に体重計です。NW機能なし。(図も割愛)

測定し終えたらGoogleHome宛に先のセリフを言います。
するとIFTTT(if Google Assistant then Webhook)でBeebotte宛に音声認識で得た体重の数値を送信します。

BeebotteはMQTTブローカーという代物なのですが、まぁざっくりDBと捉えてもOKです。
HTTP/S、MQTT/Sでデータの送受信が可能です。(REST APIが用意されている)
※ 無料版でも一日あたり5000回のメッセージ送信が使えるという、個人では十分使える優良製品です。

ここに値が更新された(というイベントが起きた)とき、Beebotteを監視しているアプリが反応する、ということが可能です。
Node-RED上、この更新イベントを検知させることができます。
検知したらデータを整形して、今度は体重の値にしてFitbit API宛にHTTPリクエストを送信、データを登録してやります。

成果

こちらも成果は画像です。
ほぼ説明が不要だと思います。なので説明はなしで。

まとめ(概要編)

いかがでしょうか。まず何より原田がとんでもない面倒臭がり屋だということはお分かりいただけたかと思います。笑
多分ソフトウェアで解決することばかりして身体を動かさないから太るんですねぇ。運動しないと。

ともあれFitbitのAPIは他にも充実しています。

アクティビティAPI(日々の活動)
ボディ&ウェイトAPI(体重関連)
デバイスAPI(アラームなど)
フードロギングAPI(食事や水の管理)
心拍数API
睡眠API(睡眠時間サマリなど)

これらのAPIを使えばどんなことができるでしょうか?
思いついたことは大抵実現できるかもしれません。

ちなみに、Pep Upの場合API仕様が公開されていません。
APIを公開するとなると、ユーザの使いすぎを防ぐRateLimiting(流量制御)などの設定を内外に行う、APIが動作する筐体のコンピューティング性能の設計(オートスケールの設計など)を行う、API機能の適切な分割、ユーザ向けのAPIドキュメント作成等々。
いろいろと手間がかかるから、かもしれません。
API公開による課金モデルは確かに魅力です。APIを公開したことで、そのAPIを用いる外部アプリが増えれば増えるほど収益は良くなることでしょう。
ただし、そこまでの面倒や手間をかける必要がなければ(≒見込みの客がいなければ)APIの公開は絶対ではないでしょう。

ここまで読んでいただきありがとうございました。

オチ

この仕組みを作ることによって運動する時間と睡眠時間が削られ、今若干不健康です。笑

おしまい。

関連記事

  1. 観葉植物とお話しよう!(Wio NodeとGrove土壌水分センサ)

  2. 娘に渡すIoTデバイス(Wio LTE+GPSセンサー)

  3. RPAによるゲームの自動化 ~とあるギルドマスターの挑戦

  4. Google Homeの機能紹介 ~ブロードキャスト機能、メモ機能~

  5. ランニングコストゼロで作るスマートホームコントロール(ラズパイとNod…

  6. SORACOM LTE-M Buttonで飲み会に行くことを妻に通知す…

  7. RFIDタグでホテルのカードキーシステムを再現しよう(RFIDリーダR…

  8. IoT奮闘記 ~なめこから始まるIoTシステム構築~

PAGE TOP