OpenBlocks IoT BX1のPD HandlerとPD EmitterでAWS IoTにセンサーデータを送信する

2015.11.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ども、大瀧です。
縁あって、ぷらっとホームさんからAWS IoTに対応したOpenBlocks IoT BX1ファームウェアのベータ版を評価する機会をいただいたので、セットアップと動作の様子をレポートしてみたいと思います。

お断り : 本記事の内容はベータ版を元に検証したものです。製品版とは仕様が異なる可能性がある点、ご注意ください。

OpenBlocks IoT BX1、PD Handler、PD Emitterとは

OpenBlocks IoT BX1はぷらっとホーム社が開発、販売するIoTゲートウェイ製品です。手のひらサイズの超コンパクト筐体にIntel Edisonを内蔵する高いスペックと3Gモデム、無線LAN、BLEモジュールという多彩な無線通信インターフェースを搭載したIoTゲートウェイに最適なモデルです。

PD HandlerはBX1に同梱される、BLEセンサーやビーコンデバイスからのデータを収集するソフトウェアです。BX1のWeb管理画面上で簡単にデバイスを検出、設定できるのが特徴です。

PD EmitterもBX1に同梱されるデータ転送ソフトウェアです。Fluentdをコアとし、AWS IoTをはじめ様々なIoT向けバックエンドへのデータ転送をサポートします。こちらもBX1のWeb管理画面で設定が可能です。

1. AWS IoTの構成

まずは、BX1からデータを送信するためのAWS IoTの構成を行います。BX1からはMQTTSクライアント証明書認証で接続するため、接続に必要なクライアント証明書と証明書ポリシーを作成、設定します。

AWS IoTの管理画面から[Create a resource] - [Create a certificate]を選択、[1-Click Certificate Create]をクリックして証明書が作成されます。

bx1iot15

[Download 〜]の3つのリンクそれぞれのファイルをダウンロード、保存しておきます。

bx1iot19

続いて、[Create a policy]を選択、任意のポリシー名(今回はPubSubToAnyTopic)、[Action]にiot:*、[Resource]に*、[Allow]にチェックが入っていることを確認し、[Create]をクリックし証明書ポリシーを作成します。

bx1iot16

先に作成したクライアント証明書をリストから選択、[Actions] - [Attach a policy]をクリックします。

bx1iot17

[Policy Name]に作成したポリシー名を入力し、[Attach]をクリックします。

bx1iot18

これで、クライアント証明書を用いてAWS IoTの任意のトピックにPublishおよびSubscribeできるようになりました。

2. BX1のセンサー設定(PD Handler)

あらかじめBX1の初期設定とセンサーデバイスの電源をオンしておきます。BX1のWeb管理画面(初期設定はhttp://192.168.254.254:880/)にアクセスし、[サービス]タブをクリック、[Bluetooth]-[使用設定]を「使用する」に変更します。すると項目が増えるので、[データ収集]を「使用する」、[PD Handler]はBLEデバイスを検出するために一旦、「使用しない」に変更、[保存]ボタンをクリックします。

bx1iot01

データ収集を有効にすると、一気にタブが増えます。

bx1iot02

[Bluetooth関連]タブをクリックし、[Bluetooth LEデバイス検出]の[検出]をクリックし、しばらく待ちます。

bx1iot03

いくつか検出されたBLEデバイスの中から利用するセンサーデバイスを選択し、識別できるよう必要に応じて[Memo]欄にセンサー名を入力します。今回はTI SensorTag CC2650を用いました。[保存]をクリックします。

bx1iot04

[一覧]に登録したセンサーデバイスが表示されればOKです。

bx1iot05

[サービス]タブに戻り、[PD Handler]を「使用する」に変更、[保存]をクリックします。これでBX1がセンサーデバイスのデータを収集するようになりました。

3. BX1からAWS IoTへの送信設定(PD Emitter)

ここからは収集したデータをAWS IoTに送信する設定を行います。クライアント証明書をBX1にアップロードします。[システム] - [ファイル管理]でアップロードファイルの管理画面を開きます。

bx1iot06

画面下部の[ファイルを選択]ボタンと[アップロード]ボタンを順にクリックし、[1. AWS IoTの構成]でダウンロードしたファイルのうち秘密鍵ファイル(XXXX-private.pem.key)と証明書ファイル(XXXX-certificate.pem.crt)をアップロードします。またSymantecのルート証明書を別途ダウンロードしておき、ここでアップロードします。

bx1iot07

以下のような感じです。

bx1iot08

[サービス] - [収集設定]をクリックします。[AWS IoT]を「使用する」に変更し、以下を入力します。

  • トピック名 : 任意のトピック名(今回はtopic/sensor1)
  • 送信先ホスト : aws iot describe-endpointコマンドの結果に表示される、AWS IoTのエンドポイント
  • Thing Shadow : Thing Shadowsとして送信するかどうか。[使用する]にすると[トピック名]の設定が無視され、Thing Shadows用の予約されたトピックに送信されます。今回は[使用しない]にします
  • root証明書 : 先ほどアップロードしたSymantecのルート証明書の絶対パス名(/var/webui/upload_dir/にアップロードしたファイル名)を入力します

bx1iot09

画面下部にスクロールし、[デバイス情報送信設定]の項目に以下を入力、[保存]をクリックします。

  • 送信対象 : 「送信する」を選択
  • 送信先設定 - 証明書(AWS IoT) : [編集]をクリックし、アップロードした証明書ファイルの絶対パス名(/var/webui/upload_dir/XXXX-certificate.pem.crt)を入力します
  • 送信先設定 - プライベートキー(AWS IoT) : [編集]をクリックし、アップロードした秘密鍵ファイルの絶対パス名(/var/webui/upload_dir/XXXX-private.pem.key)を入力します

bx1iot10

これで設定は完了です。動作の様子は、[サービス] - [収集ログ]でPD Handler、PD Emitterそれぞれのログが確認できます。データが収集、送信できているときのログは以下のような感じです。

bx1iot12

bx1iot13

動作していないようであれば、一度BX1を再起動するのも良いでしょう。[メンテナンス] - [停止・再起動]をクリック、[再起動]の[実行]ボタンをクリック、次の画面も[実行]をクリックし再起動します。

bx1iot11

4. 動作確認

では、mosquitto_subコマンドでトピックをSubscribeしてみます。

$ mosquitto_sub \
  --cafile rootCA.pem --key 252a279c3d-private.pem.key --cert 252a279c3d-certificate.pem.crt \
  -h XXXXXXXXXXXX.iot.ap-northeast-1.amazonaws.com -p 8883 -t topic/sensor1 -d -i osx
Client osx sending CONNECT
Client osx received CONNACK
Client osx sending SUBSCRIBE (Mid: 1, Topic: topic/sensor1, QoS: 0)
Client osx received SUBACK
Subscribed (mid: 1): 0
Client osx received PUBLISH (d0, q0, r0, m0, 'topic/sensor1', ... (317 bytes))
{"state":{"reported":{"deviceId":"b0b4XXXXXXXX","memo":"sensor1","objectTemp":20.8,"ambientTemp":26.9,"humidity":57.1,"temperature":27.1,"pressure":45.9,"lux":229.4,"accelX":0.1,"accelY":0,"accelZ":1,"gyroX":-0.1,"gyroY":-0.4,"gyroZ":1.1,"magX":-87.3,"magY":-29.1,"magZ":-72.9,"time":"2015-11-06T12:13:55.680+0900"}}}
Client osx received PUBLISH (d0, q0, r0, m0, 'topic/sensor1', ... (312 bytes))
{"state":{"reported":{"deviceId":"b0b4XXXXXXXX","memo":"sensor1","objectTemp":20.9,"ambientTemp":26.9,"humidity":57.1,"temperature":27,"pressure":6.6,"lux":229.6,"accelX":0.1,"accelY":0,"accelZ":1,"gyroX":-1,"gyroY":-0.7,"gyroZ":1.2,"magX":-85.3,"magY":-29.8,"magZ":-71.2,"time":"2015-11-06T12:14:00.702+0900"}}}
Client osx received PUBLISH (d0, q0, r0, m0, 'topic/sensor1', ... (313 bytes))
{"state":{"reported":{"deviceId":"b0b4XXXXXXXX","memo":"sensor1","objectTemp":20.9,"ambientTemp":26.8,"humidity":57.1,"temperature":27,"pressure":49.2,"lux":229.5,"accelX":0.1,"accelY":0,"accelZ":1,"gyroX":-1.1,"gyroY":-0.5,"gyroZ":1,"magX":-86.1,"magY":-30.6,"magZ":-72.9,"time":"2015-11-06T12:14:05.751+0900"}}}
Client osx received PUBLISH (d0, q0, r0, m0, 'topic/sensor1', ... (314 bytes))
{"state":{"reported":{"deviceId":"b0b4XXXXXXXX","memo":"sensor1","objectTemp":21.1,"ambientTemp":26.8,"humidity":57.2,"temperature":27,"pressure":6.6,"lux":229.5,"accelX":0.1,"accelY":0,"accelZ":1,"gyroX":-0.8,"gyroY":-0.2,"gyroZ":1.2,"magX":-75.3,"magY":-27.9,"magZ":-62.1,"time":"2015-11-06T12:14:10.766+0900"}}}

JSON形式でデバイスID、メモに加えセンサーデータがPublishされていることが確認できました!

ちなみに、先ほど送信設定で[Thing Shadow]を[使用する]に設定しAWS IoTの管理画面でThingを作成しておくと、Thingのプロパティに以下のようにThing Shadowのデータ(state.reported以下)としてセンサーデータが確認できます。

bx1iot14_1

いい感じですね。あとはAWS IoTのルールエンジンを設定することでDynamoDBがS3など、AWSの様々なサービスにセンサーデータが転送できます。ルールエンジンについては、こちらの記事を参考にしてください。

まとめ

BX1に同梱されるPD Handler、PD EmitterによるAWS IoTへのセンターデータ送信の様子をご紹介しました。Web画面の設定のみで完結する手軽さは、初めてセンサーネットワークを構築するのにうってつけですね。正式リリースが楽しみです。

また、BX1には3Gモデムが内蔵されているので、SORACOMとの組み合わせにも期待したいですね。SORACOM BeamのAWS IoT連携機能がPD Emitterの[MQTTサーバー]設定から利用できそうな雰囲気を感じ取りました。追って検証したいところです!