LoginSignup
6
4

More than 5 years have passed since last update.

Node-REDからFitbitのLiveDataを取得してみる

Posted at

これはNode-RED Advent Calendar 2017の21日目の記事です。

Raspberry Pi Zero WでFitbitからリアルタイムにデータを取る」はシェルから実行しましたが、ラズパイにNode-REDを入れて、Node-RED上でFitbitのlivedataを取得する試みです。

ネタがこちらの記事とほぼカブってますが気にしない!!


以下、言い訳。

FitbitはBLEのHeart Rate profileに則っていないので、node-red-contrib-ble-heart-rateが使えないのです。

言い訳、終わり。


まずは動作の様子をご覧ください。
UIの作成には、node-red-dashboardを使いました。

node-red-contrib-fitbit-livedata.gif

最初50と表示しているのは、ただ単に最低値を50にしているからだけで、
また心拍数がやたらと高いのは、動画を撮る前に1分ほどスクワットしたからです:muscle::muscle::muscle:

node-red-contrib-fitbit-livedata

Node-REDからfitbit-livedataを使えるようにラップした自作Nodeです。ソースはこちら

作ったNodeはtracker Nodelivedata Nodeの二つで、こちらの記事を参考に作りました(ほぼ写経です)。


それぞれ、fitbit-livedataモジュールのメソッドgetTrackersscanTrackersに相当します。
ちなみに、Nodeの色はFitbitのロゴの色を少し意識しました。

tracker Node

Fitbit.comのアカウント情報を入力すると、そのアカウントに登録されたFitbitのリストを、デバイス認証情報をつけて出力します。

[
  {
    "name": "Charge HR",
    "auth": {
      "btleClientAuthCredentials": {
        "authSubKey": "abcdef0123456789abcdef0123456789",
        "nonce": 0123456789
      },
      "type": "XTEA"
    },
    "serialNumber": "0123456789ab",
    "address": "fe:dc:ba:98:76:54"
  },
  {
    "name": "Ionic",
    "auth": {
      "btleClientAuthCredentials": {
        "authSubKey": "0123456789abcdef0123456789abcdef",
        "nonce": -987654321
      },
      "type": "AES"
    },
    "serialNumber": "abcdef0123456",
    "address": "98:76:54:32:10:fe"
  }
]

一番欲しいのは、各Fitbitのauth以下の情報です。これが正しくない場合、次のFitbit
への接続時に失敗します。

ちなみにtrackerというのは、Fitbitデバイスそのもののことです。

livedata Node

tracker Nodeから出力されたFitbitのリスト(もしくは、そのリストをfunction Node等を使ってフィルタリングしたもの)を入力すると、Node-REDが動作するデバイス(今回はラズパイ)のbluetoothを使って周囲にあるFitbitを探し、connected/data/disconnectedの3つのイベントを出力します。dataイベントがFitbitから通知されるlivedataです。

このNodeは複数配置できますが、スキャン/接続に使っているbluetoothデバイス自体は一つしか存在しないので、そこをうまくハンドリングしないといけないのですが、まだその辺りの実装は甘々です(なのでまだnpmでは公開していません)。

動作環境

当然、Node.jsとNode-REDが必要なので、それぞれv9.3.0とv0.17.5を入れました。またUIを簡単に作れるnode-red-dashboardをNode-REDに追加しています。

Flow

最後に上の動画で使ったFlowです。
image.png
まだデバッグしながら作っているので、だいぶ無駄が多いですね。。。

Node-REDから使えると、Fitbitから取得したlivedataをリアルタイムに外部に送信して連携しやすくなるので、使い道が広がるかと思い作ってみました。

心拍数をとるだけなら冒頭に紹介したこちらの方が参考になると思いますが、何らかの事情でFitbitを使う場合は、本記事を参考にしていただくか、または、私宛に連絡いただければ相談に乗れるかもしれません。

# こういうネタの方がよかったですかね?

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4