ma2shita @ Plat'Home Co., Ltd. v1 2015/4/14
AWS IoTビジネスセミナー内 ハンズオントラックの手順について記載しています
Amazon Kinesis | http://aws.amazon.com/jp/kinesis/
大規模な分散データストリームをリアルタイムで処理するための完全管理型のクラウドベースのサービスです。センサーデータなど何万ものソースから送られてくる量のデータを連続的に取得し、格納します。本ハンズオンではTI SensorTag CC2541から発信されたセンサーデータ格納先として利用します。
※以降、文中ではKinesisと略記します
Amazon Cognito | http://aws.amazon.com/jp/cognito/
ユーザーアイデンティティおよびデータ同期に関する機能を提供するサービスです。いくつかのパブリックログインプロバイダ(Amazon、Facebook、Google)を通してユーザに意のアイデンティティを作成でき、未承認のゲストをサポートすることも可能です。本ハンズオンでは OpenBlocks IoT BX1 からデータを Kinesis に格納する際の認証に利用します。
※以降、文中ではCognitoと略記します
OpenBlocks IoT BX1 | http://openblocks.plathome.co.jp/products/special/bx1_sp/
ぷらっとホーム社の「クラウドネットワークと物理インターフェースを結ぶトータルIoTゲートウェイ」。Intel Edisonと3Gを搭載、Wi-Fi、Bluetoothといった無線通信機能を内蔵。さらにUSB、RS-232C、RS-485、GPIO、Ethernetなどの多様なインターフェースにも対応し、 業界特有の機器やセンサーであっても接続することが出来ます。
※以降、文中ではBX1と略記します
TI SensorTag CC2541 | http://www.tij.co.jp/tool/jp/cc2541dk-sensor
SensorTag は、ワイヤレス・センサ・アプリケーションに焦点を合わせた初めての Bluetooth スマート開発キットであり、スマートフォン向けアプリケーションの開発者をターゲットとした唯一の開発キットです。温度センサ、湿度センサ、圧力センサ、加速度計、ジャイロスコープ、および磁力計を内蔵しています。
※以降、文中ではsensorTagと略記します
本ハンズオンでは、下記についてハンズオン受講者にご用意いただきます
- ノートPC
- USB: Aポート 2つ以上搭載
- Wi-Fi接続
- OS: Windows7以上、OSX10.8以上、Linux kernel 3.0以上
- RS-232Cターミナルソフト (Teraterm、screen、minicom等)
- AWSアカウント
スキル: Linux上でCLI(Command Line I/F)の操作を行います
本ハンズオンを行うにあたって、運営側から下記が貸与されます
- OpenBlocks IoT BX1
- BX1本体 x 1
- USB給電コンソールケーブル x 1
- TI SensorTag CC2541
- sensorTag本体 x 1
※ハンズオン終了時には上記は返却いただきます
※紛失、受講者の責による破損については補償をご請求させていただく場合がございます
メインプログラム:
- BX1とsensorTagをBLE(Bluetooth Low Energy)にて接続し、sensorTagのボタン操作に反応するNode.jsプログラムを体験
- sensorTagのボタン操作の結果データをJSON化した上でKinesisに送信するNode.jsプログラムを体験
ステップアッププログラム:
- sensorTagのジャイロスコープ(物体の角度や角速度を検出する計測器)センサーのデータを読み出す
- Cognitoを使用して、Node.jsプログラム内からAPIアクセスキーを排除し、セキュアにKinesisへアップロードする
固定長フォントでの表記はコマンドラインもしくはプログラムコードです
## on BX1
ls
## on BX1__と表記がある場合は、BX1上での操作を、## on NotePC__とある場合は、ノートPC上での操作を行ってください
本ハンズオンで使用するコードは、すべて下記URLで掲載しています
https://github.com/plathome/handson_a/tree/master/a0417
ハンズオン中は、サポーターが巡回しております お気軽にお声がけください
- 時間の関係上、全員が各チェックポイントを完了していなくともハンズオンを進める場合がございますが、ご了承ください
- 当ハンズオンではAWSアカウント作成は行いません。事前に作成の上、ご参加ください
- 講師の説明と資料を見ながらの自主トレーニング形式となります。PC等お忘れなきようお願い致します
- シリアルコンソール経由でBX1にログインし、作業を行います。シリアルコンソールの操作方法やLinux等については事前にご確認いただきますよう、お願い致します
必ず「あとかたづけ」に記載されている削除作業を実施してください
13:30 受付開始
14:00 AWSのIoTへの取り組み(仮名称) ADSJ Business Development Dept & Solution Architect
~~~ ハンズオン開始 (オープニング) ~~~
15:00 イントロ説明: 主催者説明、BX1やTI Sensor Tag諸元説明
15:15 ハンズオン (TI SensorTag + node.js => Amazon Kinesisアップロード体験)
- 45 セットアップ
- 15 Kinesisアップロード
16:15 フォロー&ステップアップ
17:00 クロージング
- 15 ハンズオンに対する実地投入の問題点とBX1/POCパッケージ紹介
- 15 Q&A
17:30 終了
- BX1 設定
- 作業ディレクトリ
- Node.jsプログラム
- Kinesisストリーム作成
- Node.jsプログラム
- データ確認
- sensorTag ジャイロスコープ
- Amazon Cognito化
USB給電シリアルコンソールケーブルをBX1とノートPCに接続します
電源ボタンはありません。給電 = 電源ONです
ノートPCと接続すると、下記のようになります。通信速度115200にて接続してください
OS | デバイス |
---|---|
Windowsの場合 | 適切なCOMポート |
OSXの場合 | /dev/tty.usbserial-XXXXXXXX |
Linuxの場合 | /dev/ttyUSB0 |
※OSXのXX部分は機器により変化します
- Windows:
- USB接続をするとFTDIのドライバがインストールされます (要 インターネット接続)
- ターミナルソフトウェアから適切なCOMポートを選択してください
- OSX:
- BX1接続の前に、FTDIのドライバをインストールしてください http://www.ftdichip.com/Drivers/VCP.htm
- e.g.)
screen /dev/tty.usbserial-A903B2ED 115200
- Linux:
- 事前準備は不要です
※インストールに時間がかかる等問題があれば、スタッフに申し出てください
BX1は/tmp/.runled
というファイルを通じて、_STATUS_のLEDを操作することが可能です
e.g.)
青を1秒間隔で点滅させる
echo -e "1000\n1000\n4" > /tmp/.runled
詳細は セルフ開発環境構築 をご覧ください
本ハンズオンでは、BX1のWi-Fi設定を済ませてありますので、それの導通確認を行います
## on BX1
ip addr show dev wlan0
ntpdate ntp1.jst.mfeed.ad.jp
ntpdateによる時刻設定が正常に完了すれば、ネットワーク接続ができている状態です
※my_uuidはsensorTagに記載されているUUIDに置き換えてください
本日のハンズオンで使用する作業ディレクトリです
## on BX1
mkdir a0417 ; cd $_
## on BX1
wget https://raw.githubusercontent.com/plathome/handson_a/master/a0417/ti_simplebutton.js
npm install sandeepmistry/node-sensortag
TI_UUID=my_uuid node ti_simplebutton.js
※my_streamは任意のKinesis stream名に置き換えてください
※my_key_id、my_secretは、それぞれ各自のAWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYに置き換えてください
AWSコンソールで作成する他、aws-cliでも作成できます
## on NotePC
aws kinesis create-stream --stream-name my_stream --shard-count 1
## on BX1
wget https://raw.githubusercontent.com/plathome/handson_a/master/a0417/ti_simplebutton2kinesis.js
npm install aws-sdk moment-timezone
AWS_ACCESS_KEY_ID=my_key_id AWS_SECRET_ACCESS_KEY=my_secret TI_UUID=my_uuid AK_STREAM=my_stream node ti_simplebutton2kinesis.js
TIPS: history -c
で オンメモリーヒストリーが消去できます
※NotePC上にnode.jsの他、jqが必要となります
## on NotePC
wget https://raw.githubusercontent.com/plathome/handson_a/master/a0417/decode_kinesis_records.js
aws kinesis get-records --shard-iterator $(aws kinesis get-shard-iterator --stream-name my_stream --shard-id $(aws kinesis describe-stream --stream-name my_stream | jq -r ".StreamDescription.Shards[0].ShardId") --shard-iterator-type TRIM_HORIZON | jq -r ".ShardIterator") | node decode_kinesis_records.js
https://github.com/plathome/handson_a/blob/master/a0417/ti_simplebutton_and_gyroscope.js
function ti_gyroscope(conned_obj) {
var period = 1000; // ms
conned_obj.enableGyroscope(function() {
conned_obj.setGyroscopePeriod(period, function() {
conned_obj.notifyGyroscope(function() {
console.info("ready: notifyGyroscope");
console.info("notify period = " + period + "ms");
conned_obj.on('gyroscopeChange', function(x, y, z) {
console.log(x, y, z);
});
});
});
});
}
ti_simple_key(sensorTag);
+ ti_gyroscope(sensorTag);
※periodは100(ms)~設定可能ですが、現状1,000(ms)固定です (原因調査中)
その他のセンサーの使い方も、基本的にはジャイロスコープと同じです
https://github.com/sandeepmistry/node-sensortag
ここまでのプログラムでは、クレデンシャル情報をクライアント側(BX1上)に置く必要がありました
ここでは、Amazon Cognitoを使って、認証情報をハードコードする事無く、AWSへのアクセスを実現します
といっても極めて簡単で、AWS.config.credentials
へ、AWS.CognitoIdentityCredentials
のインスタンスを放り込むだけです
※といっても、Amazon Cognitoの設定が必要ですが
Identity Pool Name を aws_iot_a0417 として進めていきます
- Identity Pool Name = aws_iot_a0417
- Enable access to unauthenticated identities にチェックを入れる
※ここはデフォルトのまま、Update rolesをクリックします。Skipする場合は、後ほど自分でRoleを作成した上で、このIdentity poolにroleを割り当てる必要があります
認証情報(Security Credentials)を表示
ここではCognito_aws_iot_a0417Unauth_DefaultRoleを選択します
このRoleは、先ほどCognitoでIdentity poolを作成した際に、一緒に作成したRoleです。Unauthがゲストアクセス用Roleになります
Attach Policyを選択
AmazonKinesisFullAccessを選択してAttach Policyをクリック
Cognito_aws_iot_a0417Unauth_DefaultRole に AmazonKinesisFullAccess が割り当てられたことを確認
これで完了です。
ti_simplebutton2kinesis.js であれば、下記の通り、AWS.config.regionの直下に AWS.config.credentials を追加するだけです
AWS.config.region = "us-east-1";
+ AWS.config.credentials = new AWS.CognitoIdentityCredentials({
+ AccountId: "YYYYYYYYYYYY",
+ RoleArn: "arn:aws:iam::YYYYYYYYYYYY:role/Cognito_aws_iot_a0417Unauth_DefaultRole",
+ IdentityPoolId: 'us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
+ });
各パラメータの参照方法は下記の通り aws-cli で確認できます
- AccountId
aws iam get-account-authorization-details | jq .UserDetailList[0].Arn | cut -d ":" -f 5
- RoleArn
aws iam get-role --role-name Cognito_aws_iot_a0417Unauth_DefaultRole | jq .Role.Arn
- IdentityPoolId
aws cognito-identity list-identity-pools --max-result 1 | jq .IdentityPools[0].IdentityPoolId
本ハンズオンでご利用いただいたBX1は、ハンズオン用にセットアップ済のものを提供いたしました
セットアップ内容は下記にてご確認いただくことが出来ます
https://github.com/plathome/handson_a/blob/master/tools/bx1_nodejs_setup.bash
https://github.com/plathome/handson_a/blob/master/tools/bx1_wifi_setup.bash
本ハンズオンでは、BLEセンサーデータを簡単に読みだすことを体験いただきました
ビジネス展開には本ハンズオンの内容に加え、下記を検討いただくことが必要となります
- センサー/IoTゲートウェイ と AWS間のネットワーク品質 (3G利用時の切断,再送等の仕組み)
- IoTゲートウェイ自体のアップデートの仕組み
Plat'Homeでは、お客様のIoTビジネスを実際の品質で検証可能なPOCパッケージを、近日中にリリースいたします
- 接続検証済 センサー (TODO:)
- IoTゲートウェイ (OpenBlocks IoT BX1)
- Amazon Kinesis/RedShift/S3等 AWS対応済 IoTネットワークスタック同梱
- 動作検証済 3G回線 SIM (Docomo網)
詳しくは当社IoTセールス担当までお声がけください
BX1は返却となるため、~/.bash_history
等の削除を行うようにしてください
rm -f ~/.bash_history
history -c
shutdown -h now
[info] Will now halt.
が表示されたら、USBケーブルを抜いてOKです
aws kinesis delete-stream --stream-name my_stream
Cognito Identity Pool以外にも、Roleが作成されているので、その削除を忘れないようにしてください
aws cognito-identity list-identity-pools --max-results 1
aws cognito-identity delete-identity-pool --identity-pool-id us-east-1:XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
aws iam list-roles
aws iam list-role-policies --role-name Cognito_aws_iot_a0417Unauth_DefaultRole
aws iam delete-role-policy --role-name Cognito_aws_iot_a0417Unauth_DefaultRole --policy-name Cognito_Authentication_Policy
aws iam detach-role-policy --role-name Cognito_aws_iot_a0417Unauth_DefaultRole --policy-arn arn:aws:iam::aws:policy/AmazonKinesisFullAccess
aws iam list-role-policies --role-name Cognito_aws_iot_a0417Auth_DefaultRole
aws iam delete-role-policy --role-name Cognito_aws_iot_a0417Auth_DefaultRole --policy-name Cognito_Authentication_Policy
aws iam delete-role --role-name Cognito_aws_iot_a0417Auth_DefaultRole
- BX1からのネット接続
- BX1とsensorTagのBLE接続
# hciconfig
# cd ~/a0417 ; npm list
- sensortag (最新でないと動かない
npm install sensortag
は古いのが入る) - aws-sdk, moment-timezone
- AWSやKinesis
- credential (AWS_ACCESS_KEY_ID 等)
- Kinesis stream
- 操作対象がBX1 or NotePCの区別が付いているか
シリアルポート接続のため、行=24 桁=80になっています
これを変更するにはstty
コマンドを使用します
stty cols 120
stty rows 35
stty rows 40 cols 200
表示サイズよりも大きくした場合、vi等のスクリーンエディタでの表示が崩れる場合があります
[EoT]