Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

これは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を使う場合は、本記事を参考にしていただくか、または、私宛に連絡いただければ相談に乗れるかもしれません。

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

iotlt
IoT縛りの勉強会です。 毎月イベントを実施しているので是非遊びに来てください! 登壇者を中心にQiitaでも情報発信していきます。 https://iotlt.connpass.com
https://iotlt.connpass.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした