センサーデータを収集する(ibeacon -> Node.js -> Treasure-Agent(td-agent) -> TreasureData)

こんにちは、高橋@SSTDです。 私的な話ですが、先日iphone5sを購入しました。せっかくなのでそのiPhoneを使ったセンサーデータ収集について紹介したいと思います。

iphone5sから、iBeaconと呼ばれる近距離無線通信機能を利用することができるようになりました。 iBeaconでは、数十メートル離れた場所にいるユーザに向けて情報を発信できることから、O2O(Online to Offline)などでの発展が期待されています。 そこで今回は、iBeaconでやり取りされるセンサーデータをTreasureDataに収集していきます。

下記の動画は、iPhoneとestimoteと呼ばれるiBeaconを用いたセンサによるショッピングでの活用イメージムービーです。


1. システムイメージ

図1に今回作成するシステムのイメージを示します。
    動作の流れ
  1. iPhone5sには、iBeaconを送信するアプリがインストールされており、そのアプリによってユーザ情報を周囲に発信します。
  2. Mac(iBeaconが受信可能な端末)は、iBeaconを送信している端末を検出し、送られてきたユーザ情報を受け取ります。
  3. Macは、受け取ったユーザ情報を同一MacにインストールされたTreasure-Agent(td-agent)に渡します。
  4. Treasure-Agentは、TreasureDataに一定間隔でユーザ情報を送信します。


図1. システムイメージ


2. 環境構築

ハードウェア環境

  • iBeacon送信用
    • iPhone5s
  • iBeacon受信用
    • MacBook Pro Letina
      • Mac OS 10.9以上
      • Bluetooth Low Energy(BLE, Bluetooth4.0)が搭載された端末

ソフトウェア環境

MacにTreasure-Agentをインストールする

こちらのドキュメントをご参照下さい。
# homebrew のインストール
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
$ which brew
/usr/local/bin/brew

# Treasure-Agentのインストール
$ brew install "http://toolbelt.treasure-data.com/brew/td-agent.rb"

# Treasure-Agentの起動
$ td-agent

MacにNode.jsをインストールする

まず、こちらからインストーラをダウンロードして、インストールします。 次に、プログラムに必要なライブラリをインストールします。
# 任意のディレクトリに移動
$ mkdir ~/test_ibeacon
$ cd ~/test_ibeacon

# ibeacon送受信用Node.jsライブラリのインストール
# https://github.com/sandeepmistry/node-bleacon
$ npm install bleacon

# Treasure-Agentへの転送用Node.jsライブラリのインストール
# https://github.com/fluent/fluent-logger-node
# http://docs.treasuredata.com/articles/nodejs
$ npm install fluent-logger


3. iBeacon送信用プログラム(iPhone)

それでは、iPhoneからiBeaconでデータを送信するためのプログラムを準備します。

今回は、上記掲載の動画にて紹介しているestimoteのデモアプリをiPhoneにインストールして、iBeacon送信用プログラムとして利用します。


図2. デモアプリの利用手順


4. iBeacon受信用プログラム(Mac)

iBeacon受信用Node.jsの下記プログラム(receiver.js)を~/test_ibeacon/に配置します。


5. Treasure-Agentの設定ファイル(Mac)

Node.jsにて指定しているポートをデータソースとして受け付けて、TreasureDataにその結果を定期的に流すための設定ファイルです。 TreasureDataでは、[秒]が最小単位となっていますが、iBeaconでは、[ミリ秒]単位でデータが送受信されます。 そのため、データ平滑化処理をTreasure-Agentに加えて、[秒]単位にデータを圧縮することをお勧め致しますが、今回はそうした設定については省きます。


6. 実行手順と結果

それでは、実行手順を下記致します。
  1. iPhoneにてデモアプリの起動
  2. MacにてTreasure-Agentの起動
    $ td-agent
  3. iBeacon受信用プログラムの起動
    $ node ~/test_ibeacon/receiver.js

実行結果を下記致します。 図3に、TreasureData上に格納されたiBeaconのログを示します(uuidはマスクしています)。


図3. TreasureData上に格納されたログ
# 標準出力例
{ uuid: 'xxxxxxxxxxxxxxxxxxxxxxxxxxx',
  major: 11039,
  minor: 23276,
  measuredPower: -57,
  rssi: -37,
  accuracy: 0.2704019819478004,
  proximity: 'immediate' }


さて、これでiBeaconでやり取りされるセンサデータをTreasureDataにアップロードすることができました。 センサデータを管理しようとすると、ログの量が膨大になってしまったり、ログの管理が煩雑になってしまうことが多々あります。 しかし、そうした問題もTreasureDataを統一的なプラットフォームとして利用することで解決することができる、かもしれませんね。 今後、様々なデバイスのログを収集することにも注目していきたいと思います。

髙橋