2015年3月13日金曜日

[.tested] 受信したiBeaconの情報をIBM Bluemixで処理するためのゲートウェイ [BX1]


スマホをビーコンの受信機とした位置情報の取得は、現在各地で実証実験が行われているところですが、小型で安価なビーコンタグの普及の加速により、その逆の形として、ビーコンを取り付けたモノや人の位置情報をビーコンの受信機により検知し、クラウド処理する事案が増えています。

今回は、ibeaconの信号を受信し、uuid、受信したゲートウェイのデバイスID、電波強度であるrssiをIBMのBluemixで処理するためのゲートウェイソフトウェアの例を紹介します。



OBDN技術ブログによる動作検証は、該当するデバイスやソフトウェアの動作について、保証およびサポートを行うものではありません。
内容に関するご指摘などありましたら、ブログ記事の担当までご連絡下さい。

<検証環境>
OpenBlocks IoT BX1 Debian wheezy 7.8 / kernel 3.10.17-poky-edison

1. 事前準備


・ネットワークへの接続

BX1 を外部ネットワークに接続可能な状態にします。本体にSIMを入れることにより3G通信も可能ですが、開発環境の構築や、パッケージの入手などはWifi 環境に接続するか、USB分岐ケーブルにUSB-Etherアダプタなどを利用して有線LAN接続することをおすすめします。

以下、WebUIの無い、先行開発キットでの手順となります。

・bluetoothの設定

Bluetoothは、初期状態ではblockしてありますので、rfkillコマンドによりunblockしてください。
具体的には、以下の手順で手動で行うか、

# bluetooth_rfkill_event &
# rfkill unblock bluetooth

以下の3行をrc.localに追加します。

bluetooth_rfkill_event &
sleep 1
rfkill unblock bluetooth

・node.jsのインストール

node.jsのインストール方法は、前回の記事を参照してください。

---
WebUIのインストールされた製品を使用される場合は、node.jsパッケージはインストール済、かつbluetooth設定はWebUIより行いますので、以下の手順でnpmだけを追加インストールしてください。


# export TMPDIR=/var/tmp
# curl -L https://npmjs.org/install.sh | sh


2. ibeaconゲートウェイソフトウェアの構築


ソフトウェアを構築するディレクトリを作成します。

# mkdir ibeacon
# cd ibeacon

node.jsを使用してibeaconの送受信を行うbleaconモジュールを導入します。
bleaconの導入には、 libbluetooth-devパッケージも必要なため、導入していない場合は合わせてインストールしてください。

# aptitude update
# aptitude install libbluetooth-dev
# npm install bleacon

bluemixへデータを送信するためのMQTTクライアントライブラリおよび、getmacライブラリをインストールします。

# npm install mqtt
# npm install getmac

次に、ゲートウェイプログラムを作成します。

# vi ib2b.js

ib2b.js

var bleacon = require("bleacon");
var mqtt = require('mqtt');
var getmac = require('getmac');

// constants
var u_port = "1883";
var s_port = "8883";
var pub_topic = "iot-2/evt/sample/fmt/json";
var sub_topic = "iot-2/cmd/blink/fmt/json";
var qs_org = "quickstart";
var reg_domain = ".messaging.internetofthings.ibmcloud.com";
var qs_host = "quickstart.messaging.internetofthings.ibmcloud.com";
var qs_type = "iotsample-ti-bbst";
var configFile = "./device.cfg";
var ledPath ="/sys/class/leds/beaglebone:green:usr";
var caCerts = ["./IoTFoundation.pem", "IoTFoundation-CA.pem"];


// globals
var org = qs_org;
var type = qs_type;
var host = qs_host;
var deviceId;
var clientId;
var password;
var username;

getmac.getMac(function(err, macAddress) {
    if (err) throw err;
     console.log(macAddress);
     deviceId = macAddress.replace(/:/g, '').toLowerCase();
     clientId = "d:" + org + ":" + type + ":" + deviceId;
     console.log('MQTT clientId = ' + clientId);
     client = mqtt.createClient(u_port, host, {
     clientId : clientId,
     keepalive : 30
     });
     console.log('MAC address = ' + deviceId);
     console.log('Go to the following link to see your device data;');
     console.log('http://quickstart.internetofthings.ibmcloud.com/#/device/' + deviceId + '/sensor/');
     bleacon.startScanning();
});

bleacon.on('discover', function(bleacon) {
        var tagData = {};
        tagData.d = {};
        //       console.log(bleacon);

        tagData.d.deviceid = deviceId;
        tagData.d.uuid = bleacon.uuid;
        tagData.d.rssi = bleacon.rssi;
        tagData.d.proximity = bleacon.proximity;

        tagData.toJson = function() {
           return JSON.stringify(this);
        };

        console.log(pub_topic, tagData.toJson());
        console.log(tagData.toJson());
        client.publish(pub_topic, tagData.toJson() );

});

3. ゲートウェイソフトウェアの起動


ibeaconの送信機を用意して、上記で作成したJavascriptプログラムを起動します。

root@bx1:~/ibeacon# node ib2b
34:95:db:28:41:d2
MQTT clientId3 = d:quickstart:iotsample-ti-bbst:3495db2841d2
createClient is deprecated, use connect instead
MAC address = 3495db2841d2
Go to the following link to see your device data;
http://quickstart.internetofthings.ibmcloud.com/#/device/3495db2841d2/sensor/
iot-2/evt/sample/fmt/json {"d":{"deviceid":"3495db2841d2","uuid":"1ae18c1c6c7b4aedb1664462634da855","rssi":-56,"proximity":"immediate"}}

デバッグ用にBluemixへ送信するデータの内容をコンソール出力していますので、不要な場合は削除してください。

3. Bluemix側の設定


Bluemix側は、前回と同じテンプレートが利用できます。



JSON形式で出力されるデータは、
deviceid: ゲートウェイのアドレス
uuid: 検出したibeaconのuuid
rssi: 電波強度
proximity: 相対距離の情報
となります。

bleaconライブラリで得られるパラメータを追加したい場合は、以下のJavascriptプログラムの出力を参考にしてください。

discover.js

var Bleacon = require("bleacon");
Bleacon.startScanning();
Bleacon.on("discover", function(bleacon) {
  console.dir(bleacon);
});

root@bx1:~/ibeacon# node discover.js
{ uuid: '1ae18c1c6c7b4aedb1664462634da855',
  major: 0,
  minor: 0,
  measuredPower: -82,
  rssi: -49,
  accuracy: 0.22312232579283153,
  proximity: 'immediate' }

4. 最後に


iBeaconのハードウェアレポートに関しては、若干古い情報にはなりますが、以下のページが参考になると思います。

The Hitchhikers Guide to iBeacon Hardware: A Comprehensive Report by Aislelabs



0 件のコメント:

コメントを投稿