JAWS DAYS 2016 IoTハンズオン 中級編

ハンズオンの概要

本ハンズオンの構成はこちらのとおりです。

_images/architecture.png

リモート制御

  • ブラウザからMaBeeeを制御(OFF/ON)
  • MaBeeとBX1をBLEで接続
  • BX1はAWS IoTのShadowに接続(常にupdate/deltaをsubscribe)
  • ブラウザからLambdaをInvokeし、Shadowをアップデート

リアルタイムダッシュボード

  • 加速度センサーのデータをブラウザ上でリアルタイムグラフ表示
  • BX1が加速度センサーから加速度データをBLE経由で受信し、AWS IoTにアッ プロード
  • ブラウザからWebsocketでAWS IoTのデバイスゲートウェイに接続し、センサー データをリアルタイムに描画

AWSの設定

本章ではハンズオンに必要なAWS側の設定を行います。今回利用するリージョ ンは 東京リージョン となりますので、ログイン後東京リージョンを必ず選択し てください。

Cognitoの設定(Identity Poolの作成)

ブラウザからAWSのリソースを利用するための認証、認可を行なうために Amazon Cognitoを利用します。


マネージメントコンソールから [Cognito] を選択します。


Cognitoの画面から [Create new identity pool] をクリックします。


“Create new identity pool”の画面で、”Identity pool name”に JAWSDAYS2016 、”Enable access to unauth...”にチェックを入れて [Create Pool] をクリックしてください。

_images/cognito-1.png

Cognitoの認証後に割当てられるIAMロールを設定します。”Your Cognito Identities...”で [Allow] をクリックしてください。

_images/cognito-2.png

“Getting Started”の画面で”Platform”のプルダウンから JavaScript を 選択してクリックします。

_images/cognito-3.png

“Get AWS Credentials”中の IdentityPoolId の “ap-northeast-1.xxx”の文字列をメモ帳などに保存します。

_images/cognito-4.png

IAM(Identity and Access Management)ロールの作成

CognitoのIdentity Pool作成時に割り当てたUnauthのロールにポリシーを設定 します。


また、AWS IoTのShadowをLambdaで利用するするため、Lambda関数に割り当て るためのIAMロールを事前に作成します。

Cognitoのロール設定

マネージメントコンソールから Identity and Access Management をクリッ クします。


左メニューから Role をクリックします。


ロールの一覧から Cognito_jawsdays2016Unauth_Role を選択し、クリッ クします。

_images/iam-1.png

“Managed Policies”の [Attach Policy] をクリックし、 AWSIoTDataAccess のポリシーを割当てます。

_images/iam-2.png

“Inline Policies”の Create Role Policy をクリックします。”Policy Generator”の Select をクリックします。


“Edit Permission”の画面で以下の値を設定します。

  • Effect: Allow
  • AWS Service: AWS Lambda
  • Actions: InvokeFunction
  • Amazon Resource name: *(アスタリスク)

入力が完了したら Add Statement をクリックします。

_images/iam-3.png

画面の下に追加したポリシーが表示されます。 Next Step をクリックします。

_images/iam-4.png

“Review Policy”で Apply Policy をクリックします。

_images/iam-5.png

Lambda用のRole作成

AWS IoT ShadowにUpdateコマンドを発行するLambdaを利用しますが、その Lambda関数に割り当てるIAMロールを作成します。


マネージメントコンソールから Identity and Access Management をクリックします。


左メニューから Role をクリックします。


[Create New Role] をクリックします。


“Set Role Name”に lambda-updateshadow-role と入力し、[NextStep] をクリックします。

_images/iam-6.png

“Select Role Type”でLambdaの欄の [Select] をクリックします。

_images/iam-7.png

“Attach Policy”でビルトインポリシーの一覧から AWSIoTDataAccess を選択し、 [Next Step] をクリックします。

_images/iam-8.png

[Create Role] をクリックします。

_images/iam-9.png

Lambda関数の作成

AWS IoTのShadowを実行するためのLambda関数を作成します。


マネージメントコンソールから Lambda を選択します。


[Create a Lambda function] をクリックします。


画面右下の [Skip] をクリックします。

_images/lambda-1.png

“Configuration function”の欄に、それぞれ以下を入力します。

  • Name: UpdateShadowForMaBeee
  • Description: 任意
  • Runtime: node.js(デフォルトのまま)
_images/lambda-2.png

以下のリンクにあるソースコードをテキストコピーして、 Lambda Function Code に貼り付けま す。 https://github.com/aquaviter/jawsdays2016-handson-int/blob/master/app/invoked-lambda.js


“Lambda function handler and role”の”Role”から先ほど作成したIAMロール lambda-updateshadow-role を選択し、[Next] をクリックします。

_images/lambda-3.png

“Review”で [Create function] をクリックします。

AWS IoTの設定

本ハンズオンで利用するAWS IoTの各種設定を行います。

証明書の作成

BX1で利用する証明書を作成します。


マネージメントコンソールから AWS IoT を選択します。


[Create a rerouce] をクリックします。


[Create a certificate] をクリックします。

_images/awsiot-1.png

[1-Click certificate create] をクリックします。

_images/awsiot-2.png

以下の3つのリンクからファイルをローカルPCにダウンロードします。

_images/awsiot-3.png

リソース一覧から作成した証明書を選択し、右上の [Action] から [Activate] を選択し、クリックします。

_images/awsiot-3.png

証明書が”Active”状態になったことを確認します。

ポリシーの作成

[Create a policy] をクリックします。

_images/awsiot-4.png

“Create a policy”の画面で以下の値を入力し、[Add statement] をクリッ クします。

  • Name: allow-all-policy
  • Action: iot:*
  • Resource: *(アスタリスク)
  • Allow/Deny: Allowにチェックを入れる
_images/awsiot-5.png

“Statements”にレコードが追加されたのを確認し、 [Create] をクリック します。

_images/awsiot-6.png

デバイスの作成

[Create a Thing] をクリックします。

_images/awsiot-7.png

“Name”に”bx1”を入力し、 [Create] をクリックします。

_images/awsiot-8.png

証明書のアクティベートとポリシー/デバイスのアタッチ

リソース一覧から作成した証明書を選択し、右上の [Action] から [Activate] を選択し、クリックします。

_images/awsiot-9.png

証明書が”Active”状態になったことを確認します。 [Actions] から [Attach a policy] を選択し、クリックします。

_images/awsiot-10.png

“Confirm”画面で”Policy name”に先ほど作成した allow-all-policy を入力し、[Attach] をクリックします。

_images/awsiot-11.png

[Actions] から [Attach a thing] を選択し、クリックします。
_images/awsiot-12.png

“Confirm”画面で”Thing name”に先ほど作成した bx1 を入力し、 [Attach] をクリックします。

_images/awsiot-13.png

以上でAWS IoT側の設定は完了です。

BX1の設定

BX1の取り扱い (電源ON/OFF・再起動、SIM挿入)

BX1は給電開始と共に電源ONとなります。USBケーブルを接続すると起動開始です

INITボタンや電源ボタンはOSのシャットダウンと再起動に利用されますので、必要時以外は押さないでください

部位の名前やSIM挿入方法については、下記を参照してください

_images/bx1_1-1_bx1.png

(OpenBlocks IoT Family WEB UI セットアップガイド P7 より抜粋)

ステータスインジケータ (LEDの表示色)

BX1は STATUS のLEDにて状態を把握することができます

本ハンズオンにおいては、起動後は 白色、水色、青色 が望ましく、それ以外の色の場合は不具合がある可能性がありますので、チューターにご相談ください

具体的なLED色と状態については、下記を参照してください

_images/bx1_1-2_led.png

(OpenBlocks IoT Family WEB UI セットアップガイド P7 より抜粋)

Web管理画面(WebUI)の表示とログイン

注意: BX1に接続したPCやスマートフォンは、BX1のWi-Fiに接続している限り、後ほど設定するSORACOM Airの設定が終わるまではインターネットに接続することが出来ません。また、SORACOM Airの設定が完了すると、インターネットへ のアクセスは “PC =[wi-fi]=> BX1 =[SORACOM Air]=> インターネット” という経路になり、 通信料が発生する可能性があります ので、Dropbox等の共有ソフトの動作をOFFにすることを 強く推奨いたします

BX1とローカルPCをWi-Fiで接続する

BX1起動が完了すると、BX1はWi-Fiのアクセスポイントとして動作を開始します

お手持ちのPCやスマートフォンから SSID を探し、接続してください

  • SSID: IoTFamily`_ホストID`
  • Password: openblocks

802.11g, WPA2-PSK の設定で接続できます

お手持ちのBX1のホストID確認方法

ホストIDは、BX1のウラ面のバーコード上の文字と数字の組み合わせになります

WebUIを表示する

BX1にWi-Fiで接続できたら、下記URLにてWebUIを表示します

http://192.168.254.254:880

下記の画面が出れば正常に接続ができています

_images/bx1_2-2_webui-login.png

WebUIにログインする

WebUIは下記IDとパスワードでログインできます

  • ID: iotadmin
  • Password: 0BSI0T (ゼロ ビー エス アイ ゼロ ティー)

ログインに成功すると、下記画面が表示されます

_images/bx1_2-3_webui-dashboard.png

富士通製加速度センサーをデバイスとして登録し、動作の確認をする

Bluetoothの使用を開始する

  1. WebUIから [サービス] - [基本] を表示
  2. Bluetooth の使用設定を 使用する にして [保存]
_images/bx1_3-1_bluetooth-enable.png

センサーを検出して使用できるようにする

  1. WebUIから [サービス] - [Bluetooth関連] を表示
  2. Bluetooth LEデバイス検出 の [検出] をクリック
  3. 一覧の中から自分のデバイスを探し 使用設定 にチェックをして [保存]

NOTE: Bluetooth デバイス検出の方でなく、 Bluetooth LEデバイス検出 を押すようにしてください

_images/bx1_3-2_ble-list.png
自分のデバイスの探し方

センサーが大量に表示されますので、自分のセンサーを選択するようにしてく ださい。

お配りしたセンサー にはテプラでアドレスが書かれております。(例: xx:xx:xx:xx:xx:xx)

確認

保存すると WebUI は下記のようになります

_images/bx1_3-4_ble-registered.png

ローカルへのデータ収集設定

AWS IoTへの送信の前に、まずセンサーからのデータ収集ができているか確認をします

BX1のデータ収集機能を開始する

  1. WebUIから [サービス] - [基本] を表示
  2. データ収集 における データ収集 ならびに PD Handler をそれぞれ 使用する にして [保存]

NOTE: “PD Handler” は “データ収集” を <使用する> にすると表示されます

_images/bx1_4-1_collector-start.png

注意: データ収集を開始すると、新たにデバイス登録をすることができなくなります。デバイス登録をする場合は、まず、データ収集を行わないように設定を変更してください。

BX1内へのデータ収集機能を開始する

  1. WebUIから [サービス] - [収集設定] を表示
  2. 本体内(local)使用する
_images/bx1_4-2-1_collect-setting.png

ページ後半に移動し dev_le_0000001 の設定を下記のようにします

  1. 送信対象送信する
  2. 送信先設定local にチェック
  3. 以上を確認し [保存]
_images/bx1_4-2-2_collect-setting.png
グラフの表示

localへのデータ収集が開始されると、WebUI内のグラフに表示が開始されます

[サービス] - [データ表示] にて確認できます

_images/bx1_4-3_plot.png

うまく表示されない場合は、後述の データ収集状況の確認 で確認します

データ収集状況の確認 (デバッグ)

WebUIから [サービス] - [収集ログ] にて、動作確認が可能です

ログ選択はそれぞれ下記のとおりです

  • pd-handler-stdout.log : センサー <-> BX1 間の送受信状況
  • pd-emitter.log : BX1 <-> 送信先(localやAWS IoT等) 間の送受信状況

注意: ログは自動的な更新をサポートしておりません。リロードの後、プルダウン選択をするようにしてください

下記画面はセンサーからのデータ読み出しが成功している場合のログ画面です。JSONが表示されているのが見てわかります

_images/bx1_5-1_log.png

トラブルシュート: うまく収集がされていない場合

pd-handler-stdout.log に timeout: ... などと表示され、JSONデータが出力されてこない場合、 センサー との接続が切れている可能性があります

センサーの電源を入れなおすことで回復できる事があります

SORACOM Air

BX1はSORACOM Airに対応しております

注意: 本設定を行うとBX1はSORACOM Air経由でインターネット接続が可能となります。それにより、BX1がWi-Fiルーターのような振る舞いとなり、BX1にWi-Fi接続したPCやスマートフォン等の通信は “PC =[wi-fi]=> BX1 =[SORACOM Air]=> インターネット” という経路になり、 通信料が発生する可能性があります ので、Dropbox等の共有ソフトの動作をOFFにすることを 強く推奨いたします

APN設定

  1. WebUIから [ネットワーク] - [基本] を表示
  2. ページ下部の サービスネットワーク(モバイル回線)使用する (クリックでAPN設定が展開します)
  3. APN / ユーザ名 / パスワード をそれぞれ下記の通り設定し [保存]
  • APN: soracom.io
  • ユーザ名: sora
  • パスワード: sora
_images/bx1_6-1_soracom.png

再起動

APNの設定は再起動で反映されるため、BX1を再起動します

  1. WebUIから [メンテナンス] - [停止・再起動] を表示
  2. 再起動を実施します (最後にに確認ダイアログがでるので見逃さないようにしてください)
_images/bx1_6-2_reboot.png

AWS IoT

センサーデータを SORACOM Air を経由して AWS IoT に送信します

準備

AWS IoTから取得しておくもの

  • 証明書(Certificate)ファイル <拡張子 .pem.crt> (前章でローカルPCにダ ウンロード済)
  • プライベートキー(PrivateKey)ファイル <拡張子 .pem.key> (前章でローカ ルPCでにダウンロード済)

その他取得しておくもの

新規でこちらをダウンロードしてください。

NOTE: ファイル名にスペースが含まれています。BX1ではファイル名にスペース文字が使用できないため、処置をしてお いてください (本例では スペースを _ に変更しています)

決めておくこと

  • 送信先トピック名 (本例では bx1/sensor としています)

    BX1設定


ファイルアップロード

まず、 AWS IoTの証明書ファイル、プライベートキーファイル並びにルート証明書ファイルの3つをBX1にアップロードします

  1. WebUIから [システム] - [ファイル管理] を表示
  2. 本画面からファイルを3つ、それぞれアップロード

すべてアップロードされると、下記のような画面となります

_images/bx1_7-1_file-upload.png
システム全体設定
  1. WebUIから [サービス] - [収集設定] を表示
  2. AWS IoT使用する (クリックで設定が展開します)
  3. 下記の通り設定します
  • 送信先ホスト: data.iot.ap-northeast-1.amazonaws.com を設定
  • root証明書 : /var/webui/upload_dir/VeriSign-Class_3-Public-Primary-Certification-Authority-G5.pem

NOTE: 先のファイルアップロード画面でアップロードされたファイルは BX1内の /var/webui/upload_dir/ にアップロードされるので、それ以下のパスを指定することでファイルの読み込みが可能です

_images/bx1_7-2-1_awsiot.png

保存せず、ページ下部へ移動します

デバイス毎設定
  1. dev_le_0000001 の 送信先設定AWSIOT にチェックを付けます (クリックで設定が展開します)
  2. 下記の通り設定します
  • トピック名 : handson/device01
  • 証明書(AWS IoT) : /var/webui/upload_dir/(アップロードした .pem.crtファイル)
  • プライベートキー(AWS IoT) : /var/webui/upload_dir/(アップロードした .pem.keyファイル)
_images/bx1_7-2-2_awsiot.png

デバッグとトラブルシュート

送信状況は データ収集状況の確認 を使用してください

またAWS IoT側に送信されているかの確認には、CloudWatchを使用する他、 mosquitto_sub コマンドが使えます

mosquitto_sub --cafile VeriSign-Class_3-Public-Primary-Certification-Authority-G5.pem --cert ANY-certificate.pem.crt --key ANY-private.pem.key -h ANY.iot.ap-northeast-1.amazonaws.com -p 8883 -q 1 -d -t handson/device01

mosquitto_sub で サーバに接続できない

証明書がINACTIVEである可能性があります。AWS IoT上で当該する証明書をActivateしてください

mosquitto_sub で CONNECT が連続で表示され、待ち受けられない

証明書に有効なポリシーがアタッチされていない可能性があります。AWS IoT上で当該する証明書に有効なPolicyをattachしてください

付録1: BX1へシリアルコンソールでログインする

BX1 は給電用USB ケーブルが、シリアルコンソールを兼任しています

FTDIのシリアルポートドライバがインストール済みのWindows / Mac OS Xや、Linuxならば追加ドライバ不要でアクセス 可能です

  • ID: root
  • Password: 0BSI0T (ゼロ ビー エス アイ ゼロ ティー)

e.g.) screen コマンドによるアクセス

screen /dev/ttyUSB0 115200

付録2: 本ハンズオンで使用するBX1の設定について

本ハンズオンで配りましたBX1は、ハンズオンをスムーズにすすめるため、標準構成から下記の変更を行っております

  1. BX1 Firmware バージョン
  2. 管理者アカウント作成
  3. Wi-Fi AP設定
  4. SSH server設定

管理者アカウント

  • 標準: WebUIに初回アクセスの際、設定をします
  • 今回: iotadmin ユーザ作成済

Wi-Fi AP設定

  • 標準: SSID = iotfamily_MACADDRESS, Password = openblocks
  • 今回: SSID = _HOSTID_1121handson, Password = HOSTID (+ Wi-Fiチャネル 混線回避のため個別設定済)

SSH server設定

  • 標準: SSHアクセス不可
  • 今回: 〃可
  • Address: 192.168.254.254:22
  • ID: root
  • Password: 0BSI0T (ゼロ ビー エス アイ ゼロ ティー)

動作確認

準備

こちらのリンクからサンプルコードをローカルPCにダウンロードしてください。 サンプルコードの構成は以下のとおりです。

https://s3-ap-northeast-1.amazonaws.com/jawsdays2016-handson-int/app.zip

  • dashboard.html
  • dashboard.js
  • control.html
  • control.js

また、 WiFiを会場のアクセスポイントに設定を変更してください。

次に、BX1にシリアルコンソールでログインしてください。Windowsの方はTeratermなどのコンソールソフト、Macはターミナルを御利用ください。

スピードは 115200 なのでご注意ください。 Macの場合、こちらのscreenコマンドも利用可能です。

screen /dev/ttyUSB0 115200

ログイン後、以下のコマンドでサンプルコードをダウンロードしてください。

wget https://s3-ap-northeast-1.amazonaws.com/jawsdays2016-handson-int/mabeee.sh

サンプルコードの以下の証明書のパスをご自身の環境に合わせて変更してください。

rootca="$cert_dir/rootca.pem"
privatekey="$cert_dir/xxxxxxxxx-private.pem.key"
cert="$cert_dir/xxxxxxxxxx-certificate.pem.crt"

ダッシュボードの確認

ダウンロードしたdashboard.jsの identityPoolId を先ほど控えたご自分のCognitoのIdentity PoolIDに書き換えてください。


$(function() {

    // IdentityPoolID  ※こちらを変更してください。
    var identityPoolId = 'ap-northeast-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

ブラウザでdashboard.htmlを開きます。センサーデータがリアルタイムにグラフが描画されることを確認します。


リモートコントロールの確認

ダッシュボードと同じように、ダウンロードしたcontrol.jsの identityPoolId を先ほど控えたご自分のCognitoのIdentityPoolIdに書き換えてください。


// IdentityPoolID  ※こちらを変更してください。
var identityPoolId = 'ap-northeast-1:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

BX1上で先ほどダウンロードしたmabeee.shを実行します。ご自分が利用する MaBeeeのアドレスxx:xx:xx:xx:xx:xxを確認し、コマンドの引数として与えて ください。


bash mabeee.sh <xx:xx:xx:xx:xx:xx>

ShadowへのSubscribeを実行します。


ローカルPCのブラウザからcontrol.htmlを開き、Start/StopでMaBeeeが搭載されているデバイスが動作するか確認してください。

ハンズオン概要

OpenBlocks IoT BX1(ぷらっとホーム様)とMaBeee(ノバルス様)、SORACOM, AWS IoTを利用して

  • 乾電池で動作するおもちゃ(プラレールやミニ四駆)をインターネット経由で制御します。
  • 加速度センサーのデータをWebsocketを使ってリアルタイムにセンサーデータを表示します。

前提条件

  • AWS Management Consoleの基本的な操作がわかる
  • AWS IoTの概要を理解している(AWS IoT ハンズオン ~基本編~」を参考にしますと、より実践的な内容を理解することが出来ます。)
  • ターミナル等を利用してコマンドの実行ができる

注意事項

  • AWSのサービス利用料金は受講者の方にご負担いただきますよう、ご了承ください。
  • ハンズオンに必要な機材は貸出品となりますので、終了後は必ず返却をお願いします。

事前準備

  • Wi-Fi環境に接続可能で、FTDIドライバがインストールされているPC
  • 参加者個人のAWSアカウント
  • Activate済みのSORACOM Air SIM(標準 [mini])
  • 初級編から参加された方は、初級編で登録したSORACOM Air SIMを引き続き利用することが出来ます
  • お忘れになった場合はハンズオンへの参加はできませんのでご了承ください。

FTDIドライバのインストールがまだの方

Windowsの場合

MacOSの場合

AWSのアカウントをお持ち出ない方は

Amazon Web Servicesをご利用いただくために、事前のアカウント取得をお願いいたします。

アカウントの取得はこちら http://aws.amazon.com/jp/register-flow/

アカウント取得はクレジットカードの番号入力が必要となります。 アカウントを取得しただけでは料金はかかりません。

SORACOM SIMをお持ちでない方は

SORACOM Airをご利用頂くために、事前にアカウントの登録とSIMの登録が必要となります。

アカウントの登録及びSIMの購入はこちら https://soracom.jp/start/

ハンズオンで利用するのは標準(mini)SIMとなります SIMの登録にはクレジットカードの番号入力が必要となります SIMを登録しますと、課金が開始されます