JAWS DAYS 2016 IoTハンズオン 中級編¶
ハンズオンの概要¶
本ハンズオンの構成はこちらのとおりです。
リモート制御¶
- ブラウザから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] をクリックしてください。
Cognitoの認証後に割当てられるIAMロールを設定します。”Your Cognito Identities...”で [Allow] をクリックしてください。
“Getting Started”の画面で”Platform”のプルダウンから JavaScript を 選択してクリックします。
“Get AWS Credentials”中の IdentityPoolId の “ap-northeast-1.xxx”の文字列をメモ帳などに保存します。
IAM(Identity and Access Management)ロールの作成¶
CognitoのIdentity Pool作成時に割り当てたUnauthのロールにポリシーを設定 します。
また、AWS IoTのShadowをLambdaで利用するするため、Lambda関数に割り当て るためのIAMロールを事前に作成します。
Cognitoのロール設定¶
マネージメントコンソールから Identity and Access Management をクリッ クします。
左メニューから Role をクリックします。
ロールの一覧から Cognito_jawsdays2016Unauth_Role を選択し、クリッ クします。
“Managed Policies”の [Attach Policy] をクリックし、 AWSIoTDataAccess のポリシーを割当てます。
“Inline Policies”の Create Role Policy をクリックします。”Policy Generator”の Select をクリックします。
“Edit Permission”の画面で以下の値を設定します。
- Effect: Allow
- AWS Service: AWS Lambda
- Actions: InvokeFunction
- Amazon Resource name: *(アスタリスク)
入力が完了したら Add Statement をクリックします。
画面の下に追加したポリシーが表示されます。 Next Step をクリックします。
“Review Policy”で Apply Policy をクリックします。
Lambda用のRole作成¶
AWS IoT ShadowにUpdateコマンドを発行するLambdaを利用しますが、その Lambda関数に割り当てるIAMロールを作成します。
マネージメントコンソールから Identity and Access Management をクリックします。
左メニューから Role をクリックします。
[Create New Role] をクリックします。
“Set Role Name”に lambda-updateshadow-role と入力し、[NextStep] をクリックします。
“Select Role Type”でLambdaの欄の [Select] をクリックします。
“Attach Policy”でビルトインポリシーの一覧から AWSIoTDataAccess を選択し、 [Next Step] をクリックします。
[Create Role] をクリックします。
Lambda関数の作成¶
AWS IoTのShadowを実行するためのLambda関数を作成します。
マネージメントコンソールから Lambda を選択します。
[Create a Lambda function] をクリックします。
画面右下の [Skip] をクリックします。
“Configuration function”の欄に、それぞれ以下を入力します。
- Name: UpdateShadowForMaBeee
- Description: 任意
- Runtime: node.js(デフォルトのまま)
以下のリンクにあるソースコードをテキストコピーして、 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] をクリックします。
“Review”で [Create function] をクリックします。
AWS IoTの設定¶
本ハンズオンで利用するAWS IoTの各種設定を行います。
証明書の作成¶
BX1で利用する証明書を作成します。
マネージメントコンソールから AWS IoT を選択します。
[Create a rerouce] をクリックします。
[Create a certificate] をクリックします。
[1-Click certificate create] をクリックします。
以下の3つのリンクからファイルをローカルPCにダウンロードします。
リソース一覧から作成した証明書を選択し、右上の [Action] から [Activate] を選択し、クリックします。
証明書が”Active”状態になったことを確認します。
ポリシーの作成¶
[Create a policy] をクリックします。
“Create a policy”の画面で以下の値を入力し、[Add statement] をクリッ クします。
- Name: allow-all-policy
- Action: iot:*
- Resource: *(アスタリスク)
- Allow/Deny: Allowにチェックを入れる
“Statements”にレコードが追加されたのを確認し、 [Create] をクリック します。
証明書のアクティベートとポリシー/デバイスのアタッチ¶
リソース一覧から作成した証明書を選択し、右上の [Action] から [Activate] を選択し、クリックします。
証明書が”Active”状態になったことを確認します。 [Actions] から [Attach a policy] を選択し、クリックします。
“Confirm”画面で”Policy name”に先ほど作成した allow-all-policy を入力し、[Attach] をクリックします。
[Actions] から [Attach a thing] を選択し、クリックします。
“Confirm”画面で”Thing name”に先ほど作成した bx1 を入力し、 [Attach] をクリックします。
以上でAWS IoT側の設定は完了です。
BX1の設定¶
BX1の取り扱い (電源ON/OFF・再起動、SIM挿入)¶
BX1は給電開始と共に電源ONとなります。USBケーブルを接続すると起動開始です
INITボタンや電源ボタンはOSのシャットダウンと再起動に利用されますので、必要時以外は押さないでください
部位の名前やSIM挿入方法については、下記を参照してください
(OpenBlocks IoT Family WEB UI セットアップガイド P7 より抜粋)
ステータスインジケータ (LEDの表示色)¶
BX1は STATUS のLEDにて状態を把握することができます
本ハンズオンにおいては、起動後は 白色、水色、青色 が望ましく、それ以外の色の場合は不具合がある可能性がありますので、チューターにご相談ください
具体的なLED色と状態については、下記を参照してください
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にログインする¶
WebUIは下記IDとパスワードでログインできます
- ID: iotadmin
- Password: 0BSI0T (ゼロ ビー エス アイ ゼロ ティー)
ログインに成功すると、下記画面が表示されます
富士通製加速度センサーをデバイスとして登録し、動作の確認をする¶
Bluetoothの使用を開始する¶
- WebUIから [サービス] - [基本] を表示
- Bluetooth の使用設定を 使用する にして [保存]
センサーを検出して使用できるようにする¶
- WebUIから [サービス] - [Bluetooth関連] を表示
- Bluetooth LEデバイス検出 の [検出] をクリック
- 一覧の中から自分のデバイスを探し 使用設定 にチェックをして [保存]
NOTE: Bluetooth デバイス検出の方でなく、 Bluetooth LEデバイス検出 を押すようにしてください
自分のデバイスの探し方¶
センサーが大量に表示されますので、自分のセンサーを選択するようにしてく ださい。
お配りしたセンサー にはテプラでアドレスが書かれております。(例: xx:xx:xx:xx:xx:xx)
確認¶
保存すると WebUI は下記のようになります
ローカルへのデータ収集設定¶
AWS IoTへの送信の前に、まずセンサーからのデータ収集ができているか確認をします
BX1のデータ収集機能を開始する¶
- WebUIから [サービス] - [基本] を表示
- データ収集 における データ収集 ならびに PD Handler をそれぞれ 使用する にして [保存]
NOTE: “PD Handler” は “データ収集” を <使用する> にすると表示されます
注意: データ収集を開始すると、新たにデバイス登録をすることができなくなります。デバイス登録をする場合は、まず、データ収集を行わないように設定を変更してください。
データ収集状況の確認 (デバッグ)¶
WebUIから [サービス] - [収集ログ] にて、動作確認が可能です
ログ選択はそれぞれ下記のとおりです
- pd-handler-stdout.log : センサー <-> BX1 間の送受信状況
- pd-emitter.log : BX1 <-> 送信先(localやAWS IoT等) 間の送受信状況
注意: ログは自動的な更新をサポートしておりません。リロードの後、プルダウン選択をするようにしてください
下記画面はセンサーからのデータ読み出しが成功している場合のログ画面です。JSONが表示されているのが見てわかります
トラブルシュート: うまく収集がされていない場合¶
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設定¶
- WebUIから [ネットワーク] - [基本] を表示
- ページ下部の サービスネットワーク(モバイル回線) を 使用する (クリックでAPN設定が展開します)
- APN / ユーザ名 / パスワード をそれぞれ下記の通り設定し [保存]
- APN: soracom.io
- ユーザ名: sora
- パスワード: sora
再起動¶
APNの設定は再起動で反映されるため、BX1を再起動します
- WebUIから [メンテナンス] - [停止・再起動] を表示
- 再起動を実施します (最後にに確認ダイアログがでるので見逃さないようにしてください)
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にアップロードします
- WebUIから [システム] - [ファイル管理] を表示
- 本画面からファイルを3つ、それぞれアップロード
すべてアップロードされると、下記のような画面となります
システム全体設定¶
- WebUIから [サービス] - [収集設定] を表示
- AWS IoT を 使用する (クリックで設定が展開します)
- 下記の通り設定します
- 送信先ホスト: 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/
にアップロードされるので、それ以下のパスを指定することでファイルの読み込みが可能です
保存せず、ページ下部へ移動します
デバイス毎設定¶
- dev_le_0000001 の 送信先設定 で AWSIOT にチェックを付けます (クリックで設定が展開します)
- 下記の通り設定します
- トピック名 :
handson/device01
- 証明書(AWS IoT) :
/var/webui/upload_dir/(アップロードした .pem.crtファイル)
- プライベートキー(AWS IoT) :
/var/webui/upload_dir/(アップロードした .pem.keyファイル)
デバッグとトラブルシュート¶
送信状況は データ収集状況の確認 を使用してください
また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は、ハンズオンをスムーズにすすめるため、標準構成から下記の変更を行っております
- BX1 Firmware バージョン
- 管理者アカウント作成
- Wi-Fi AP設定
- 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を使ってリアルタイムにセンサーデータを表示します。
製品紹介ページ¶
- OpenBlocks IoT BX1 (http://openblocks.plathome.co.jp/products/obs_iot/bx1/)
- MaBeee (http://mabeee.mobi/)
- AWS IoT (http://aws.amazon.com/jp/iot/)
- SORACOM (https://soracom.jp/)
前提条件¶
- 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を登録しますと、課金が開始されます