2016-02-26

OpenBlocks IoT Family で一時的な Wi-Fi クライアント接続を行う

Web ユーザーインターフェースの設定を変更せず、一時的に Wi-Fi クラアントとして OpenBlocks IoT Family を既設の Wi-Fi ネットワークへ接続する方法を紹介します。

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

はじめに


OpenBlocks IoT Family(以下OpenBlocks)の初期設定では、Wi-Fi インターフェースはアクセスポイントとして動作するようになっています。常時 3G や LTE のモバイル回線を利用する場合にこの設定は便利ですが、メンテナンス等の目的で一時的に Wi-Fi クライアントとして既設の Wi-Fi ネットワーク環境に接続したいことがあります。

もちろん Web ユーザーインターフェース経由で設定を変更しても良いのですが、設定を戻すのを忘れて別のネットワーク環境に移った場合、Web ユーザーインターフェースへアクセスできず、設定の初期化が必要になるなど後々少々面倒くさいことになります。

そこで Web ユーザーインターフェースの設定を変更せずに、一時的に OpenBlocks を Wi-Fi クライアントとして既設ネットワークへ接続する方法を紹介します。

Wi-Fi のアクセスポイントモードとクライアントモード


はじめに Wi-Fi のアクセスポイントになっている OpenBlocks がどういう状態であるかを整理してみましょう。ネットワークインターフェース(以下I/F)としては次のような状態になっています。
  • Wi-Fi I/F はアクセスポイントモードに設定
  • Wi-Fi I/F で DHCP のサービスが稼働
したがって次の三つを行えば、アクセスポイントモードからクライアントモードへ切り替えて、既設の Wi-Fi ネットワークに接続できます。
  1. DHCP サービスを停止
  2. Wi-Fi I/F をアクセスポイントモードからクライアントモードへ変更
  3. Wi-Fi クライアントとして必要な設定の投入
これらを順に説明します。

DHCP サービスの停止


DHCP サービスを停止するにはサービスを実施しているプロセスの dhcpd を停止するだけです。dhcpd については単純にkillで問題ありません。

# killall dhcpd

Wi-Fi I/F をアクセスポイントモードからクライアントモードへ変更


Wi-Fi I/F をアクセスポイントをクライアントのモードへ切り替えるのは、少し複雑です。というのも Wi-Fi I/F のドライバーがカーネルモジュールになっていて、モジュールのロード時にモード設定を行っているからです。また Wi-Fi アクセスポイントをサービスする hostapd というプロセスも動いています。手順としては次のようになります。
  1. hostapd の停止
  2. Wi-Fi I/F の停止
  3. ドライバーのモードの切り替え
  4. Wi-Fi I/F の起動
具体的には次の各コマンドを実行します。

# killall hostapd
# ifdown wlan0
# modprobe -r bcm4334x
# modprobe bcm4334x op_mode=1
# ifup wlan0

Wi-Fi クライアントとして必要な設定


以上まで完了したら、後は一般的な Linux を Wi-Fi に接続する場合と同じ手順となります。Wi-Fi クライアントとして必要な設定を行うには、次の2つの手順を踏むことになります。
  1. 既設 Wi-Fi 環境への接続
  2. DHCP クライアントとして設定
既設 Wi-Fi 環境へ接続するためには、SSID(ESSID)とパスフレーズを用意してwpa_supplicant を設定します。wpa_supplicant の設定の詳細は省略しますが、以下の例では /var/run/wpa.conf ファイルで Wi-Fi 接続の設定を行っています。最後に dhclient プログラムを起動すれば完了です。

# cat /var/run/wpa.conf
ctrl_interface=/var/run/wpa_supplicant
network={
        ssid="WIFISSID"
        scan_ssid=1
        key_mgmt=WPA-PSK
        psk="PASSWORD"
}
# wpa_supplicant -s -B -P /var/run/wpa_supplicant.wlan0.pid ¥
        -i wlan0 -D nl80211,wext -c /var/run/wpa.conf
# dhclient -v -pf /run/dhclient.wlan0.pid ¥
        -lf /var/run/dhclient.wlan0.leases wlan0

以上で Wi-Fi クライアントへの切り替えは完了です。この作業では何ら設定を保存していないため次に OpenBlocks を再起動した場合は本来の設定が有効になり、Wi-Fi I/F はアクスセスポイントとして動作します。

Wi-Fi クライアント設定のシェルスクリプト


上記に紹介した作業を毎回手作業で実施するには手順が多すぎますので、これらを実施するシェルスクリプトを最後に紹介します。

#!/bin/sh
#
# OpenBlocks IoT familyでWebのユーザーインターフェースの設定を変更せず
# 一時的にWi-Fiをクライアント設定に変更するシェルスクリプト
#
# このスクリプト中でsleep 1を多用しているのは、立て続けにコマンドを起
# するとうまく動かないものがあるため、待ち時間を確保している

export PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 次の2行はWi-Fi環境に合わせて設定する
SSID=WIFISSID # Wi-Fi接続先のSSID
WKEY=PASSWORD # Wi-Fi接続先のパスフレーズ

IF=wlan0 # 無線I/F名 OpenBlocksの場合wlan0
WPACONF=/var/run/wpa.conf # wpa_supplicantの設定ファイル名

# Wi-Fi I/Fのモード切り替え
killall dhcpd hostapd ; sleep 1
ifdown wlan0 ; sleep 1
modprobe -r bcm4334x ; sleep 1
modprobe bcm4334x op_mode=1 ; sleep 1
ifup wlan0 ; sleep 1

# /etc/network/interfaces の記載によって
# ifupで付加される余計なIPアドレスの削除
ip addr del 192.168.254.254/24 dev ${IF}

# wpa_supplicantの設定ファイル(ここでは/var/run/wpa.conf)の生成
#  一般的なWPAの事前共有鍵の設定を前提にしているため、
#  Wi-Fi環境の設定に応じて修正する
cat <<-EOT >$WPACONF
ctrl_interface=/var/run/wpa_supplicant
network={
   ssid="$SSID"
   scan_ssid=1
   key_mgmt=WPA-PSK
   psk="$WKEY"
}
EOT

# wpa_supplicantの起動
wpa_supplicant -s -B -P /var/run/wpa_supplicant.${IF}.pid \
-i ${IF} -D nl80211,wext -c $WPACONF
sleep 1

# dhcpクライアントサービスの起動
dhclient -v -pf /run/dhclient.${IF}.pid  \
-lf /var/run/dhclient.${IF}.leases ${IF}

# Wi-Fi経由でのssh 接続を許可する場合、
# 以下のコメントアウトを外してiptablesの行を有効にする
# iptables -A INPUT -p tcp --dport ssh -j ACCEPT

2015-11-05

OpenBlocks 600D向けDebian8ファームウェアの非公式(Unofficial)リリースについて

非公式となりますが、OpenBlocks 600D向けのDebian8パッケージを公開しました。

レポジトリは以下の場所となります。

http://ftp.plathome.co.jp/pub/OBS600/unofficial/debian/jessie/


本公パッケージの公開にあたり、カスタマーケア等でのサポートは行っておりませんのでご了承の上ご利用願います。
 
OBS600用ファームウェア 4.1.8-0の更新手順を記述します。

前準備


Debian6、Debian7のパッケージは使用できません。

ラムディスクモード時のflashに保存しているパッケージとストレージ併用モード時のCFに保存しているパッケージは消去する必要があります。

また、自作したプログラムは共有ライブラリを使用している場合は動作しない可能性があります。staticで作成したプログラムは動作すると思われます。


ラムディスクモードで使用していた場合


FLASH ROMのユーザ領域を初期化します。
  1. 必要なファイルはバックアップをとってください。
  2. shutdown後、INITボタンを押しながら電源ONしてください。
  3. 以下のコマンドでFLASH領域を初期化してください。
    # flashcfg -e
    

ストレージ併用モード(CF)で使用していた場合


CFをフォーマットします。
  1. 必要なファイルはバックアップをとってください。
  2. 以下のコマンドでストレージ併用モードを解除します。
    # e2label /dev/sda1 ""
    
  3. shutdown後、INITボタンを押しながら電源ONしてください。
  4. 再起動したら、念のため以下のコマンドでFLASH領域を初期化します。(必要なファイルがあった場合はバックアップをとっておいてください。)
    # flashcfg -e
    
  5. 以下のコマンドでCFをフォーマットした後、リブートします。
    # mkfs.ext4 -L DEBIAN /dev/sda1
    # reboot
    
前準備は完了です。

ファームウェアの更新


更新の手順は今までのDebianファームウェアと同じです。
まず、Debian8のファームウェアファイルを用意します。

2015/10/19時点:

http://ftp.plathome.co.jp/OBS600/unofficial/jessie/4.1.8-0/kernel-image-4.1.8-0.deb

以下のコマンドでインストールします。

# dpkg -i kernel-image-4.1.8-0.deb

インストール終了後、再起動してください。

補足


今回のファームウェアにおいては、(あまりにも使いにくいという理由で)systemdではなく、sysvinitに変更を行っています。



補足その2 (2015/11/26)

uboot-imageがないというご指摘があり、現在修正作業を行っています。
当面の回避策は以下の通りです。

以下のファイル
 
http://ftp.plathome.co.jp/pub/OBS600/unofficial/jessie/4.1.8-0/uImage.initrd.obs600 
 

をダウンロードします。

以下のコマンドを実行します。
# flashcfg -f uImage.initrd.obs600
 
 

2015-04-17

[.tested] TI CC2541 Sensor TagのデータをIBM Bluemixで処理するためのセンサーゲートウェイ マルチデバイス対応 [BX1]

今回は、以前ご紹介したTI CC2541 Sensor TagのデータをIBM Bluemixで処理するためのセンサーゲートウェイのマルチデバイス対応の実装方法についてご紹介します。


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

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

1. 事前準備


ネットワークへの接続、bluetoothの設定、開発環境および関連ツールのインストール、node.jsのインストールにつきましては前々回の記事を参照してください。

2. センサーゲートウェイソフトウェアの構築


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

# mkdir multi_device
# cd multi_device

今回必要なモジュールを導入します。
libbluetooth-devパッケージも必要なため、導入していない場合は合わせてインストールしてください。

# aptitude update
# aptitude install libbluetooth-dev
# npm install async
# npm install getmac
# npm install mqtt
# npm install sensortag

次に、ゲートウェイプログラムを作成します。
今回は温度データを取得し、Bluemixへ送信するサンプルです。

# vi multi_st2b.js

multi_st2b.js


var SensorTag = require('sensortag');
var async = require('async');
var mqtt = require('mqtt');
var getmac = require('getmac');

// constants
var u_port = "1883";
var pub_topic = "iot-2/evt/sample/fmt/json";
var qs_org = "quickstart";
var qs_host = "quickstart.messaging.internetofthings.ibmcloud.com";
var qs_type = "iotsample-ti-bbst";

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

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/');
});

function onDiscover(sensorTag) {
  console.log('discovered: ' + sensorTag.uuid + ', type = ' + sensorTag.type);

  sensorTag.on('disconnect', function() {
    console.log('disconnected! ' + sensorTag.uuid);
  });

  async.series([
      function(callback) {
        console.log('connectAndSetUp');
        sensorTag.connectAndSetUp(callback);
      },
      function(callback) {
        console.log('readDeviceName: ' + sensorTag.uuid);
        sensorTag.readDeviceName(function(error, deviceName) {
          console.log('\tdevice name = ' + deviceName);
          callback();
        });
      },
      function(callback) {
        console.log('enableIrTemperature');
        sensorTag.enableIrTemperature(callback);
      },
      function(callback) {
        setTimeout(callback, 2000);
      },
      function(callback) {
        sensorTag.on('irTemperatureChange', function(objectTemperature, ambientTemperature) {

          var tagData = {};
          tagData.d = {};

          tagData.d.deviceid = deviceId;
          tagData.d.uuid = sensorTag.uuid;
          tagData.d.rssi = sensorTag.rssi;
          tagData.d.proximity = sensorTag.proximity;
          tagData.d.objectTemperature = objectTemperature.toFixed(1);
          tagData.d.ambientTemperature = ambientTemperature.toFixed(1);

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

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

          console.log(sensorTag.uuid);
            console.log('\tobject temperature = %d °C', objectTemperature.toFixed(1));
            console.log('\tambient temperature = %d °C', ambientTemperature.toFixed(1))
        });

        console.log('setIrTemperaturePeriod');
        sensorTag.setIrTemperaturePeriod(1000, function(error) {
          console.log('notifyIrTemperature');
          sensorTag.notifyIrTemperature(function(error) {
          });
        });
      },
      function(callback) {
        console.log('disableIrTemperature');
        sensorTag.disableIrTemperature(callback);
      },
    ]
  );
}

SensorTag.discoverAll(onDiscover);

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


TI CC2541 SensorTagを複数用意し、上記で作成したJavascriptプログラムを起動します。

root@bx1:~/multi_device# node multi_st2b.js
34:95:db:28:41:0e
MQTT clientId = d:quickstart:iotsample-ti-bbst:3495db28410e
createClient is deprecated, use connect instead
MAC address = 3495db28410e
Go to the following link to see your device data;
http://quickstart.internetofthings.ibmcloud.com/#/device/3495db28410e/sensor/

ここでは2台で試してみました。それぞれのセンサータグのサイドボタンを押すと、以下のようなメッセージが表示され、BluemixへMQTTによるデータ送信を開始します。

discovered: 5c313ec119a5, type = cc2540
connectAndSetUp
discovered: 5c313ebff12e, type = cc2540
connectAndSetUp

4. Bluemix側の設定


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



今回は温度データのみですが、データを追加したい場合はインストールしたsensortagモジュール(node_modules/sensortag)にあるtest.jsなどを参照して、必要なデータを追加してください。

5. 最後に


今回は、TI CC2541 Sensor Tagを複数接続する例を紹介しました。
さらに詳しい情報が知りたい方は
https://github.com/sandeepmistry/node-sensortag
を参照してください。

2015-03-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



2015-03-11

[.tested] TI CC2541 Sensor TagのデータをIBM Bluemixで処理するためのセンサーゲートウェイ [BX1]

この1月24日,25日に、天王洲のSamurai Startup Islandにおいて、

「IoTハック新年会2015」

を行いました。
このイベントは、IBMとSamurai Incubateが共催で『日常生活で使うモノ』をテーマ行うアイディアソン、ハッカソンで、クラウド環境としては、IBM BlueMix、デバイスとしては、TI CC2541センサータグ、ゲートウェイとして、OpenBlocks BX1を用意しています。

今回は、上記ハッカソンで使用した、OpenBlocks BX1側のTI CC2541 SensorTagデバイスゲートウェイ実装方法について紹介します。



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をビルドするためには、開発環境が必要です。(IO開発ボード付きセットの場合は開発環境をプリインストールしています)
また、今回必要になるパッケージ類を以下の手順でインストールします。

# aptitude update
# tasksel install standard
# aptitude install build-essential
# aptitude install git

・node.jsのインストール

node.jsはdebianのパッケージを使用せず、最新版を以下のサイトから入手し、ビルドしています。

Node.js

# wget http://nodejs.org/dist/v0.12.0/node-v0.12.0.tar.gz
# tar xvzf  http://nodejs.org/dist/v0.12.0/node-v0.12.0.tar.gz
# cd node-v0.12.0
# ./configure
# make -j3
# make install

2. センサーゲートウェイソフトウェアの構築


IBM Internet of Thingsの以下のレシピページより、BeagleBone用のゲートウェイプログラムを入手します。

Texas Instruments BeagleBone with SensorTag - Internet of Things:

# git clone http://github.com/ibm-messaging/iot-beaglebone

以下のディレクトリに移動し、setup.shを編集し、checkInstall bluezの行をコメントアウトします。
(bluezはすでにインストールされているものを使用します。debian wheezyのaptで導入されるものは、BLEに対応していないバージョンのため使用しません)

     :
# checkInstall bluez
checkInstall libbluetooth-dev
  :

編集後、setup.shにより、動作環境の構築を行います。

#./setup.sh

次に、ゲートウェイプログラム本体の若干の修正を行います。
これは、beaglebone向けに書かれていて、データを受け取りLEDを点滅させる記述があるのですが、 このLEDの点灯処理部分だけをコメントアウトしてしまいます。
ここは、OpenBlocksのLEDの仕様で書き換えれば同様にBluemix側からLEDの点灯処理ができるのですが、今回は行っていません。

# vi iot_sensortag.js

50行以下を以下の様に編集します。

// LED functions
// run asynchronously, callbacks just trap unexpected errors
function ledWrite(extra, content, callback) {
//  fs.writeFile(ledPath+extra, content, function(err) {
//      if (err) throw err;
//  });
//  if (callback) callback();
}

2. センサーゲートウェイソフトウェアの起動


TI CC2541 SensorTagを用意し、編集したJavascriptプログラムを起動します。

root@bx1:~/iot-beaglebone/samples/nodejs# node iot_sensortag.js
Press the side button on the SensorTag to connect

メッセージに従い、センサータグのサイドボタンを押すと、接続を行い、BluemixへMQTTによるデータ送信を開始します。

root@bx1:~/iot-beaglebone/samples/nodejs# node iot_sensortag.js
Press the side button on the SensorTag to connect
SensorTag connected
Discovering services and characteristics
Device name = TI BLE Sensor Tag
System id = 34:b1:f7:0:0:d5:d5:2a
Serial number = N.A.
Firmware revision = 1.01 (Feb  7 2013)
Hardware revision = N.A.
Software revision = N.A.
Manufacturer name = Texas Instruments
Enable IR temperature
Enable accelerometer
Enable humidity sensor
Enable magnetometer
Enable barometer
Enable gyroscope
MQTT clientId = d:quickstart:iotsample-ti-bbst:98f170697445
MQTT Connected
Sending data
MAC address = 98f170697445
Go to the following link to see your device data;
http://quickstart.internetofthings.ibmcloud.com/#/device/98f170697445/sensor/

3. Bluemix側の設定


Bluemixは、試用期間が30日あり、登録して30日間は無料ですべての機能を試すことが出来ます。
(無料期間終了後は、クレジットカードの登録が必要ですが、375GB時間までは無料で使用できるようになっています)

カタログのボイラープレートより、左上のNode-Redを使用したInternet of Things Foundationアプリケーションを選択します。


インスタンスを起動します


最初に簡単なサンプルプレートがありますので、この左側のIBM IoT App Inに、上記で立ち上げたゲートウェイソフトウェア起動時に表示されるMAC Addressを入力します。


Deployし、すぐ右にあるDevice Dataのdebugタブを引き出すと、右のDebugウィンドウに、センサータグからデータがJSON形式で送信されていることが確認出来ます。


 様々な機能が用意されていますので、あとはPaaS側で処理を作成していくことになります。
この環境はそのまま実稼働環境へと移行させることも出来ます。


4. 最後に


今回は、TI CC2541 Sensor Tagを利用した例を紹介しました。
ibeacon仕様のビーコンタグのデータをBluemixへ送信するテストプログラムも作成していますので、次回ご紹介します。

2014-11-25

OpenBlocks IoT BX1 ハンズオン開催中

OpenBlocks IoT BX1のハンズオンDayを正式にスタートしました。

今週より、BX1本体およびDockBoard(ES版)との組み合わせにてご利用いただけます。

 
天王洲アイル、Samurai Startup Islandにて毎週水曜日(10:00-18:00)に開催。
予約制となりますので、以下の開催概要にそってご予約下さい。
当日でも空いていれば予約可能です。

現在ほぼマンツーマンのハンズオンとなっており、使用できるセットも限られているため、多人数となる場合は、早めにご連絡いただき、機材などの調整をさせてください。


------

「ハンズオンDay」開催概要

  • 実施内容
    当社IoT向けマイクロサーバー「OpenBlocks® IoT BX1」を使用したハンズオンです。
    実際にOpenBlocks® IoT BX1の実機や開発環境に触れながら基本操作の確認や、アプリケーション開発、システム構築に必要となる事項の事前サーベイなどが可能です。

    参考:OpenBlocks® IoT BX1特設サイトURL
    http://openblocks.plathome.co.jp/products/special/bx1_sp/
  • 対象となる方
    IoTのアプリケーション開発や、センサーデバイス接続開発、IoTサービス開発などを検討している方に最適です。
  • 開催スケジュール
    原則、毎週水曜日に実施致します。詳細なスケジュールは下記URLよりご確認下さい。
    http://goo.gl/vUxmwv
  • 参加方法
    機材の都合上事前予約が必要となります。開催スケジュールをご確認のうえ、当社WEBサイトの参加申込フォームよりお申込み下さい。

    参加申込フォームURL
    https://openblocks.plathome.co.jp/form/bx1_handson/input.html
  • 参加費用
    無料です。
  • 開催場所
    Samurai Startup Island
    住所:東京都品川区 東品川2-2-28 Tビル2F
    アクセス:天王洲アイル駅より徒歩5分
    http://samurai-startupisland.asia/access

2014-10-08

OpenBlocks IoT BX1 開発者向け情報など

OpenBlocks IoTファミリ BX1を発表しました。

M2M・IoTシステムの構築に最適な極小サイズのマイクロサーバー「OpenBlocks® IoTファミリ BX1」を発表

OpenBlocksシリーズは、従来より複数のLANポートを持ち小型堅牢かつ汎用のLinux環境を提供するマイクロサーバとして、ネットワークの監視管理、ゲートウェイなど、様々なシーンで利用していただいていましたが、今回のBX1シリーズにおいては、Wifi/3G/BlueTooth(BLE対応)を標準サポートした、無線通信に重点を置いた製品となっています。

発表ではスケルトンカバーに入った製品としてお見せしていますが、まずは内部写真をここに公開します。


カバーは試作品のため、スケルトン仕様となっていますが、製品ではホワイトとなる予定です。


外部コネクタ。上部がオプション有線接続用端子となり、ケーブルを交換することにより、USB(有線LAN含む)、シリアル(RS-232C/RS-485)、GPIO(最大19ポート)に対応します。
下部がSIMスロットです。


標準でUSBケーブルが添付します。本ケーブルはUSB側からの給電と、シリアル通信をサポートしており、PCに接続する場合は、 USBシリアル経由のコンソールとして見えます。


本体基板の裏側です。


本体基板の上部写真です。

本体の仕様は以下の通り。

CPU モデル インテル® Atom™ プロセッサー 500MHz (デュアルコア)
動作速度 500MHz (デュアルコア)
メインメモリ オンボード 1GB (LPDDR3)
FLASH ROM 4GB (eMMC)
内部インターフェイス 3G(W-CDMA)※1
Bluetooth 4.0
Wi-Fi (IEEE802.11a/b/g/n)
外部インターフェイス USB 2.0(Type-A)ケーブル
GPIO (最大19ポート) オプションケーブルにて対応
シリアル 1ポート RS-232C/RS-485
寸法 (mm) 41.6mm(W)x 96mm(D)x 11.3mm(H)(突起部含まず)
電源 DC 5〜48V
出荷時OS Debian GNU/Linux

※1 NTTドコモ FOMA網に対応予定。他通信事業者向けも検討中。

開発環境は、Debian GNU/Linuxを標準でサポートし、従来のOpenBlocksシリーズと同様に、実機ベースでの手早い開発環境をBXでも提供していきたいと考えています。

提供時期ですが、開発者向けに、本体と各種IOを外だし出来るボードをセットにしたDPパッケージを先に提供し(時期は未定)、製品としては2月を予定しています。

展示会の情報などは、以下のページでご案内しています。

特設サイトURL:
http://openblocks.plathome.co.jp/products/special/bx1_sp/

Facebook:

https://www.facebook.com/OpenBlocksIoT



現在、DPパッケージのリリースに前後して、いち早く製品をご覧いただけるよう、ハンズオンdayやハッカソン、アイディアソンなどを企画しておりますので、日程が決まり次第またお知らせします。