IoTハンズオン Powered by OpenBlocks IoT | SORACOM | AWS

Auhtor: Kohei MATSUSHITA

概要

OpenBlocks IoT BX1 (以下 BX1) を使用し、富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02” のデータを “SORACOM Air” の回線で “AWS IoT” に送信し、Amazon Elasticsearch Service(以下 Amazon ES)上のKibanaでグラフ化するところまでを解説します

全体構成

OpenBlocks IoT BX1 (以下 BX1) を使用し、富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02” のデータを “SORACOM Air” の回線で “AWS IoT” に送信し、”Amazon Elasticsearch Service” (以下 Amazon ES)上のKibanaでグラフ化するところまでを解説します

全体構成図と流れは以下のようになります

_images/bx1_00_overview.png

上図SVG

  1. BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定
  2. センサーとBX1の接続
  3. Amazon Elasticsearch Serviceのインスタンス作成と設定
  4. AWS IoTの設定
  5. BX1とAWS IoTの接続
  6. 片付け&まとめ
  7. 自習室: SORACOM BeamでAWS IoTの認証処理をオフロード
  8. 自習室: AWS IoTのThing Shadowでパトライトを制御する

※テキストのPDFは こちら(5.5MB P74)

ハンズオンの前に

対象者(前提条件・スキル等)

  • AWS Management Consoleの基本的な操作がわかる
  • シリアルコンソールとターミナル等による機器操作スキル (FTDIシリアルドライバのインストール等含む)
  • AWS IoTの概要を理解している(AWS IoT ハンズオン ~基本編~」を参考にしますと、より実践的な内容を理解することが出来ます。)

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

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

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

ソラコムのアカウント取得・SORACOM Airのアクティベートが済んでいない方は

SORACOM Airを使用するため、事前にSORACOMアカウントの取得並びにSIMのアクティベートを完了しておいていただく必要があります

アカウントの取得とSIMのアクティベートはこちら

アクティベートにはクレジットカードの番号入力が必要となります (アカウント登録には必要ありません)

部材等の確認

準備するものをご確認ください (不足している場合はチューターにお声がけください)

  • 支給されるもの
    • 持ち帰りOK
      • SORACOM Air <miniSIMサイズ> x 1枚
    • 貸し出し物 (返却いただきます)
      • OpenBlocks IoT BX1 x 1ケ
      • BX1用 電源兼シリアルコンソール USBケーブル x 1本
      • センサーデバイス FWM8BLZ02 (電池入り) x 1ケ
  • 用意いただくもの <必須>
    • ノートPC
      • Wi-Fiで2.4GHz/5GHz双方への接続可 (5GHzのみは不可)
      • USBポート使用可 (AタイプでUSB3.0以上(900mA以上の給電)の1ポート以上)
      • curlやwgetなどHTTPコールが可能なツール
      • Chrome等のモダンブラウザ(Internet Explorerは不可)
    • 参加者個人のAWSアカウント
    • 有効なクレジットカード (SORACOM Airのアクティベーションに使用)
  • あると便利なもの
    • スマートフォン (本ドキュメントを参照しながらの作業)
    • FTDIシリアルドライバー
    • シリアルコンソール制御用ターミナルソフトインストール済 (例: TeraTerm, GNU screen)

注釈

curl等のツール類はBX1の中に入っていますので、それを利用することも可能です (ただしBX1から利用する場合は3G回線費用が別途かかる可能性が有ります。その他、EC2インスタンスを用意して、そちらで実施することも可能です)

注意事項

  • 章毎に達成状況を確認しながら進めていきますが、時間の都合上未達者がいても次に進む場合がありますのでご了承ください
  • AWSやSORACOM等、ハンズオンで発生する費用については参加者の自己負担となります
  • 不明な点はお気軽にチューターへご相談ください

ソラコムの料金詳細は SORACOM Airのご利用料金 をご覧ください

BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定 へ進む

BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定

本章のゴール: pingをWebUI上から行い、3G回線がつながっていることを確認する

作業の位置づけ;

_images/bx1_01_overview.png

上図SVG

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

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

起動完了(使用できるようになるまで)に4分ほどかかります

注釈

  • INITボタンや電源ボタンはOSのシャットダウンと再起動に利用されますので、必要時以外は押さないでください
  • SIMは電源ON前に挿すようにしてください。起動後に挿しても認識しません

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

警告

必ずお読みください

  • OpenBlocks IoTがサポートしているのは標準SIMサイズ(miniSIMサイズ)のみとなっています
  • microSIMやnanoSIMといった 別サイズのSIMを利用する場合は必ず講師の指示を仰ぐようにしてください
_images/bx1_01_bx10.png

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

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

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

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

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

_images/bx1_01_bx11-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とWi-Fiで接続する

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

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

  • SSID: iotfamily_BX1シリアル番号
  • Password: openblocks

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

お手持ちのBX1のシリアル番号確認方法

シリアル番号は、BX1のウラ面のバーコード上の文字と数字の組み合わせになります

下記例では F2A00788 がシリアル番号です (そのためSSIDは iotfamily_F2A00788 となります)

_images/bx1_01_bx12-serial.jpg

WebUIを表示する

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

http://192.168.254.254:880

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

_images/bx1_01_webui0-start.png

使用許諾の確認と管理ユーザアカウントの設定

使用許諾の “同意する” ボタンを押すと、WebUI管理用アカウントの作成を求められます

下記にて設定願います (本来は複雑な組み合わせが好ましいのですが、ハンズオン時のトラブルシュート対策です)

ID iot (アイ オー ティー)
Password iot (アイ オー ティー)

成功すると、ネットワーク設定画面が表示されます

_images/bx1_01_webui1-network.png

Wi-Fi AP設定とSORACOM Air(3Gネットワーク)設定

ネットワーク設定画面を開きます

(前項から正しく遷移していれば表示されているはずですが、そうでない場合は [ネットワーク] - [基本] を選択するようにしてください)

ネットワーク設定画面では各項目をそれぞれ下記のとおり設定してください

ホスト名 <シリアル番号> (例 F2A00788)
ドメイン openblocks.local
Wi-Fi / 使用チャンネル (設定項目の出し方は 下記注釈を参照のこと) <シリアル番号 最後の値> (例:F2A00788なら “8”) (0の方は10 / A~Eの方は 11)
Wi-Fi / SSID iotfamily_<シリアル番号> (例: iotfamily_F2A00788)
Wi-Fi / 無線認証 WPA-PSK
Wi-Fi / 無線暗号化 AES
Wi-Fi / パスフレーズ openblocks
モバイル回線 / APN soracom.io
モバイル回線 / ユーザ名 sora
モバイル回線 / パスワード sora

注釈

  • Wi-Fiのチャンネル設定は 詳細を表示する をチェックすることで表示されます
  • モバイル回線の設定は サービスネットワーク(モバイル回線)使用する にチェックすることで表示されます

警告

  • 無線認証をWPA2-PSKに変更すると、OSによっては再接続ができなくなる事があります

再起動

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

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

注釈

再起動は5分程度かかります

_images/bx1_01_webui2-reboot.png

pingで確認

再起動が無事終了すればBX1は3Gネットワークに接続された状態となっています

WebUI上からpingを発信して確認してみます

警告

  • 再起動の後はにOpenBlocks IoTのWi-Fiではなく、会場などのWi-Fiに接続されることがあります。WebUIに接続できない場合は接続先を確認してください
  • pingは SORACOM Air SIM のアクティベーションが完了していないと成功しません
  1. WebUIにログインした後 [ネットワーク] - [通信確認]
  2. 宛先ホスト: metadata.soracom.io
_images/bx1_01_webui3-ping.png

ここまで到達できればゴールです

センサーとBX1の接続 へ進む

トラブルシュート

  1. 当該SIMのアクティベーションは済んでいますか?
  2. モバイル回線は接続できていますか?
モバイル回線の接続状況確認と接続方法

WebUIの “ダッシュボード” にてモバイル回線の接続状況確認と接続作業を行うことができます

_images/bx1_01_webui4-dasboard.png

センサーとBX1の接続

本章のゴール: センサーデバイス FWM8BLZ02(以下、センサー)の温度データをBX1で受信し、WebUI上でグラフ化される

作業の位置づけ;

_images/bx1_02_overview.png

上図SVG

センサーをBX1に登録する

センサーの電源をONにする

センサー側面の電源スイッチをONにしてください

_images/bx1_02_fwm8blz02-power.png
センサーの仕様
_images/bx1_02_fwm8blz02-spec.png
Bluetoothの使用を開始する
  1. WebUIから [サービス] - [基本] を表示
  2. Bluetooth の使用設定を 使用する にして [保存]
_images/bx1_02_bluetooth-enable.png
センサーを検出して登録する
  1. WebUIから [サービス] - [Bluetooth関連] を表示
  2. Bluetooth LEデバイス検出 の [検出] をクリック
  3. 一覧の中から自分のデバイスを探し 使用設定 にチェックをして [保存]

警告

  • Bluetooth デバイス検出 ではなく Bluetooth LEデバイス検出 を押すようにしてください
_images/bx1_02_ble-list.png
自分のデバイスの探し方

Device Name = FWM8BLZ02 が大量に表示される可能性があります

お配りしたセンサーにはアドレスのタグが書かれており、画面上に表示されている Device Address (= MAC Address) と一致したものが、ご自分のセンサーとなりますので確認してください

_images/bx1_02_fwm8blz02-macaddress.jpg
登録状況の確認

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

_images/bx1_02_ble-registered.png

以上でセンサーをBX1に登録できました

BX1のデータ収集設定

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

注釈

  • “PD Handler” は “データ収集” を <使用する> にすると表示されます
_images/bx1_02_collector-start.png

注釈

  • データ収集を開始すると、新たなデバイスの登録ができなくなります
  • デバイス登録をする場合は、まず、データ収集を行わないように設定を変更してください
BX1内へのデータ収集機能を開始する
  1. WebUIから [サービス] - [収集設定] を表示
  2. 本体内(local)使用する
_images/bx1_02_collect-setting1.png

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

送信対象 送信する
取得時間間隔(ms) 1000
送信先設定 localのみにチェック

以上を確認し [保存]

_images/bx1_02_collect-setting2.png
グラフの表示

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

[サービス] - [データ表示] で、[グラフ表示]の[表示する]を選ぶとグラフで確認できます
グラフが表示されるまで多少時間が必要です。グラフが表示されない場合は少し待ってから[再描画]をクリックしてください
_images/bx1_02_plot.png

ここまで到達できればゴールです

Amazon Elasticsearch Serviceのインスタンス作成と設定 へ進む

トラブルシュート

データ収集状況ログの確認

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

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

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

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

_images/bx1_02_log.png
pd-handler-stdout.log に timeout: ... などと表示されている

センサーとのBLE接続確立に失敗している可能性があります

  1. しばらく待つ (再接続するため)
  2. データ収集プロセスを再起動する (チューターにご相談ください)

これらで対処可能です

Amazon Elasticsearch Serviceのインスタンス作成と設定

本章のゴール: Amazon Elasticsearch Service上のKibanaでテストデータのグラフが表示される

※以下、文中ではAmazon Elasticsearch Serviceを以下Amazon ESと略します

作業の位置づけ;

_images/bx1_03_overview.png

上図SVG

Amazon ESのクラスタを作成

警告

  • OpenBlocks IoTのWi-Fi APに接続をしている場合は、会場のWi-Fi等に切り替えてください。切り替えない場合、AWS管理画面へ接続できない・ロードが遅い等の問題が起こる他、SORACOM Airの通信料がかかる場合があります

Get started (もしくはダッシュボードの Create a new domain) からAmazon ESのインスタンス作成のウィザードを開始します

それぞれのステップでは、下記項目を変更するようにしてください (それ以外の項目はデフォルト値でOKです)

Elasticsearch domain name awsiot-handson-es
> [Next] を押して次のステップへ
Instance type t2.micro.elasticsearch
Storage type EBS
> [Next] を押して次のステップへ
Set the domain access policy to Allow open access to the domain
> [Next] を押すと確認画面がでるので、確認後 [Confirm and create] で作成します

警告

今回は時間の関係上 “Allow open access to the domain” (=すべてのアクセスを許可) としています。本番運用時にはアクセスコントロールを行うようにしてください

注釈

Amazon ESが使えるようになるまで10分程度かかるため、次章の作業(AWS IoTの設定) を行うとよいでしょう

ElasticsearchのEndpointとKibanaのURLを確認する

Amazon ESのダッシュボードからESのEndpointとKibanaのURLを確認します

_images/bx1_03_es-dashboard.png

テストデータの投入と表示

Amazon ESが利用可能になったら、動作確認を行います

データの投入

注釈

  • ここでは確認のために curl コマンドを使用します。準備願います (Windowsの方向け)
  • date コマンドが下記の通り使えない場合は 2016-05-19T10:10:50+0900 というフォーマットの日付文字列に置き換えてください
  • ${YOUR_ES_ENDPOINT} は、Amazon ESのダッシュボードで確認した Endpoint に置き換えてください
curl -X PUT ${YOUR_ES_ENDPOINT}/es-test/es0/1 -d "{\"deviceId\":\"es-test0\",\"field1\":1,\"@timestamp\":\"$(date +%Y-%m-%dT%H:%M:%S%z)\"}"

Windowsの方: 下記の通りダブルクオーテーションのエスケープを変更してください

curl -X PUT %YOUR_ES_ENDPOINT%/es-test/es0/1 -d "{""deviceId"":""es-test0"",""field1"":1,""@timestamp"":""2016-05-19T10:10:50+0900""}"

コマンドの投入結果は下記のようになります

{"_index":"es-test","_type":"es0","_id":"1","_version":1,"created":true}
Kibanaでの表示
Indexを作成する

Amazon ESのダッシュボードで得た Kibana のURLにアクセスします

インデックスの設定を下記のとおりにします

Index name or pattern es-test
Time-field name @timestamp
_images/bx1_03_kibana1.png

テストデータが正しく投入されていれば “Create” ボタンが押せるようになるはずですので、押してください

下記の通り、インデックスのカラム一覧が表示されれば成功です

※そうでない場合、テストデータの投入に失敗している可能性があります。コマンドの実行結果等を確認してください

_images/bx1_03_kibana2.png
データを表示する

“Discover” をクリックするとデータの中身を表示することができます

_images/bx1_03_kibana3.png

ここまで到達できればゴールです

AWS IoTの設定 へ進む

トラブルシュート

テストデータの投入に失敗した(ようなので)インデックスを削除する
$ curl -X DELETE ${YOUR_ES_ENDPOINT}/es-test
データ投入に成功した(はず)が、ダッシュボードにデータが表示されない

データ表示期間の範囲が適切でない場合があります

右上の “Time Picker” のアイコンから “Time Filter” で、例えば “Last 30 Days” に設定してみてください

_images/bx1_03_kibana4.png

AWS IoTの設定

本章のゴール: AWS IoTでMQTT(AWS IoT上のテストサイト)による受信ができることを確認する

作業の位置づけ;

_images/bx1_04_overview.png

上図SVG

概要

AWS IoTの設定は若干ステップが多いため、まずステップの概要を確認します

  1. IAMロールの作成
  2. AWS IoTポリシの作成
  3. “モノ” の作成
  4. 証明書の作成, ポリシの割り当て, “モノ”の割り当て
  5. ルールの作成

IAMロールの作成

AWS IoTのルールを作成する前に、AWS IoTからAmazon Elasticsearch Serviceへデータ送信をするための権限ロールを作成します

ロールの作成

IAMコンソールのロール一覧から [新しいロールの作成] をクリックし、ウィザードを開始します

ウィザードの各項目は下記のようにしてください

ロール名 awsiot_handson_put_to_es
ロールタイプの選択 AWS サービスロール => AWS IoT を選択
ポリシーのアタッチ <なにも選択せず>
インラインポリシーの設定
  1. IAMコンソールのロール一覧から、先ほど作成した awsiot_handson_put_to_es ロールを選択
  2. [インラインポリシー] - [ここをクリックしてください] をクリック
  3. 次の画面では [カスタムポリシー] - [選択] をクリック
  4. 下記の通りポリシー名とポリシードキュメントを設定し [ポリシーの検証] をした後 [ポリシーの適用] をクリック
ポリシー名 awsiot_handson_put_to_es_adhoc_policy

ポリシードキュメント

AWS_ACCOUNT_ID は各自のAWS AccountIDに読み替えるようにしてください

{
    "Version": "2012-10-17",
    "Statement": {
        "Effect": "Allow",
        "Action": "es:ESHttpPut",
        "Resource": [
            "arn:aws:es:ap-northeast-1:AWS_ACCOUNT_ID:domain:awsiot-handson-es/*"
        ]
    }
}

以上でロールの作成は完了です _

AWS IoTポリシの作成

“モノ” が AWS IoTにアクセスする際の制限を設定することができます

今回はフルコントロールとします

注釈

IAMのポリシーとは別のものになります

作業
  1. AWS IoTのコンソールから “Create a resource” をクリックし “Create a policy” をクリック
  2. 下記を入力したら “Add statement” をクリックし “Create” をクリック
Name awsiot_handson_policy
Action iot:*
Resource テキストボックスに * を入力、Allowにチェック

これでポリシが作成されました

※下図は “Add statement” 直前の画面です

_images/bx1_04_create_policy.png

“モノ” の作成

AWS IoT上で “モノ” として認識できるようにします

実物の “モノ” の状態を管理するための機能であるThing shadowを使用する際に、特に必要となります

作業
  1. AWS IoTのコンソールから “Create a thing” をクリック
  2. 下記を入力したら “Create” をクリック
Name awsiot_handson_thing0

これで “モノ” が作成されました

※下図は “Create” 直前の画面です

_images/bx1_04_create_thing.png

証明書の作成, ポリシの割り当て, “モノ”の割り当て

“モノ” がAWS IoTにアクセスする際に使用する証明書(キーペア)を作成します

“モノ” に公開鍵を持たせてAWS IoTにアクセスすることで認証としています

証明書は有効(活動中)/無効(非活動)というステータスを持っており、証明書が有効だとしても非活動の場合はAWS IoTへのアクセスができないといった制御が可能です

また、この証明書にポリシと “モノ” を割り当てることで、その証明書を持っている “モノ” の制限をすることができるという仕組みです

すでに存在するキーペアから作成することも可能ですが、今回はAWS IoTに発行してもらいます

注釈

AWS IoT接続トラブルの原因の80%が、証明書に起因するものですので丁寧に実施してください

作業
  • 証明書の作成
    1. AWS IoTのコンソールから “Create a certiicate” をクリック
    2. “1-CLick certificate create” をクリック <”INACTIVE” と書かれた証明書が作成されます>
    3. 画面上の “Download private key” と “Download certificate” をクリックし、それぞれ .pem.key ファイルと .pem.crt ファイルを取得する

警告

  • private keyファイルはこのタイミングでのみダウンロード可能です。あとでダウンロードできないので、必ず取得してください
  • ポリシを証明書に割り当て
    1. 作成された証明書のチェックボックスをクリック (ついていれば次へ)
    2. [Actions]の中から[Attach a policy]をクリック
    3. Policy name にポリシ名 awsiot_handson_policy を入力し “Attach” をクリック
  • “モノ” を証明書に割り当て
    1. 証明書のチェックボックスをクリック (ついていれば次へ)
    2. [Actions]の中から[Attach a thing]をクリック
    3. Thing name にポリシ名 awsiot_handson_thing0 を入力し “Attach” をクリック
  • 証明書のアクティベート
    1. 証明書のチェックボックスをクリック (ついていれば次へ)
    2. [Actions]の中から[Activate]をクリック <証明書が “ACTIVE” に変化します>

※下図は 証明書にチェックを入れた後 “Actions” をクリックした直後の画面です

_images/bx1_04_create_certificate.png

ルールの作成

AWS IoTでは、MQTTやRESTで送信されてきたデータに対して、どのようにアクションするか設定でき、これをルールと呼びます

作業
  1. AWS IoTのコンソールから “Create a rule” をクリック
  2. 下記を入力したら “Add action” をクリックし “Create” をクリック
Name awsiot_handson_rule0
Description awsiot_handson_rule0
SQL version 2016-03-23-beta
Attribute *
Topic filter awsiot_handson/sensor0
Condition <なにも入力しません>
Choosen an action Amazon Elasticsearch Service
Domain name awsiot-handson-es
ID ${newuuid()}
Index awsiot_handson
Type fwm8blz02
Role awsiot_handson_put_to_es

これでルールが作成されました

※下図は “Add action” 直前の画面です

_images/bx1_04_create_rule.png

注釈

Amazon Elasticsearch Serviceのインスタンスが完了してない場合は Endpointが https://null となり、設定が完了できません。Amazon ESのインスタンス作成の完了を待ってからルール作成を行ってください

AWS IoT上のMQTTクライアントツールを使用した確認

AWS IoTにはMQTTクライアントツールがあり、それを使って簡単に動作確認をすることができます

作業
  1. AWS IoTコンソールの右上 “MQTT Client” をクリック
  2. “Generate client ID” をクリック <Client IDに任意の文字列が入ります>
  3. “Connect” をクリック
  4. “Publish to topic” をクリック
  5. 下記を入力して “Publish” をクリック
Publish topic awsiot_handson/sensor0
Payload {"state":{"reported":{"deviceId":"awsiot-test0","field1":3,"time":"2016-05-19T10:10:50+0900"}}}
_images/bx1_04_awsiot_mqtt_client.png

Kibana上に上記payloadのデータが入っていれば成功です

注釈

Amazon Elasticsearch Serviceのインスタンス作成と設定 では es-test というIndexにデータを入れましたが、この章で使用しているIndexは awsiot_handson です

Kibanaの Settings 画面から新規に awsiot_handson を基にIndexを作成するようにしてください

_images/bx1_04_kibana.png

ここまで到達できればゴールです

BX1とAWS IoTの接続 へ進む

トラブルシュート

AWS IoTのログ

CloudWatchで確認することができます

_images/bx1_04_cloudwatch.png
CertificateファイルやPrivate keyファイルのダウンロードを忘れた

AWS IoT上で証明書を作成しなおしてください

また、ファイルを失ってしまった証明書は削除してください

AWS IoTの証明書が削除できない

証明書を削除できる条件は 1.モノやポリシが割り当てられていない 2.Deactivate状態である この2つが満たされている必要があります

割り当て済みのポリシや “モノ”を解除する

  1. 証明書をクリック
  2. 右側に現れたウィンドウの [Detail] で モノやポリシを “dettach” します

Deactivate状態にする

  1. 証明書のチェックボックスをクリック (ついていれば次へ)
  2. [Actions]の中から[Deactivate]をクリック <証明書が “INACTIVE” に変化します>
Rule作成時に Elasticsearch Service のインスタンスが見つからない

リージョンを確認してください

AWS IoTとElasticsearch Serviceのリージョンは一致している必要があります

Kibanaにデータが表示されない

表示対象のIndexが es-test になっていませんか?

BX1とAWS IoTの接続

本章のゴール: センサーからのデータがAWS IoTを通じてAmazon ES上のKibana上で確認できる

作業の位置づけ;

_images/bx1_05_overview.png

上図SVG

準備

AWS IoTから入手しておくもの
  • 証明書(Certificate)ファイル <拡張子 .pem.crt>
  • プライベートキー(PrivateKey)ファイル <拡張子 .pem.key>
  • エンドポイント
エンドポイントの確認方法

最終的には “XXXXXXX.iot.REGION.amazonaws.com” というフォーマットの文字列を入手します

下記どちらかの方法で確認してください

  • AWS CLIで aws iot describe-endpoint で確認
  • AWS IoTコンソールの “Things” の REST API endpointから抜き出す
_images/bx1_05_awsiot_endpoint.png
その他、入手しておくもの

警告

  • 上記URLにはファイル名にスペースが含まれています。しかしBX1ではファイル名にスペース文字が使用できないため、処置をしておいてください (本ハンズオンではスペースを _ に変更しています)

BX1設定

ファイルアップロード

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

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

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

_images/bx1_05_file-upload.png
収集設定 / AWS IoTに対する設定
  1. WebUIから [サービス] - [収集設定] を表示
  2. AWS IoT使用する (クリックで設定が展開します)
  3. 下記の通り設定します
インターバル 3
送信先ホスト <エンドポイントURL>
root証明書 /var/webui/upload_dir/VeriSign-Class_3-Public-Primary-Certification-Authority-G5.pem

注釈

  • 先のファイルアップロード画面でアップロードされたファイルは BX1内の /var/webui/upload_dir/ にアップロードされます。それ以下のパスを指定することでファイルの読み込みが可能です
_images/bx1_05_bx1-awsiot1.png

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

収集設定 / センサーのデータ送信先にAWS IoTを加える
  1. dev_le_0000001 の 送信先設定AWSIOT にチェックを付けます (クリックで設定が展開します)
  2. 下記の通り設定します
トピック名 awsiot_handson/sensor0
証明書(AWS IoT) /var/webui/upload_dir/<アップロードした .pem.crtファイル>
プライベートキー(AWS IoT) /var/webui/upload_dir/<アップロードした .pem.keyファイル>
_images/bx1_05_bx1-awsiot2.png

保存後、即座にAWS IoTへの送信が始まります。Amazon ESのKibanaでデータ受信ができているか確認してください

_images/bx1_05_kibana1.png

データの変化を楽しむ

加速度をつかってこんなグラフを作ることできます

※Kibanaの使い方は本ハンズオンの範疇を超えてしまうため、興味のある方はチューターにお声がけください

_images/bx1_05_kibana2.png

センサーのデータ取得間隔が1秒毎となっているため、加速度の数値を変化させたい場合は若干振り続ける等するようにしてください

くれぐれも降ってる最中に投げ出す事のないように、ご注意願います!

お疲れ様でした!

無事ハンズオンのゴール達成です!

あとかたづけ作業をお忘れなく!

片付け&まとめ へ進む

トラブルシュート

以下を確認してみてください

  1. センサーからのデータを受信できているか (pd-handler-stdout.logを確認してください)
  2. 3G通信ができているか (pingを試してみてください)
  3. AWS IoTへ接続・送信できているか (CloudWatchを確認してください)
  • AWS IoTのエンドポイントはあっているか
  • トピック名はあっているか
  • 証明書があっているか
    • 証明書はACTIVEになっているか
    • 有効なポリシがアタッチされているか
  • ルールは正しくAmazon Elasticsearch ServiceへデータをPUTできるようになっているか
  1. Amazon Elasticsearch ServiceへのデータPUT (CloudWatchを確認してください)
  • 有効なロールがセットされているか
BX1からAWS IoTへの送信状況の確認

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

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

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

片付け&まとめ

AWSリソース

本ハンズオンで作成したAWSリソース等は継続的に費用がかかるものがあるため、不要ならば削除するようにしてください

  • AWS IoT
    • ルール
    • 証明書
      1. アタッチされている “モノ” とポリシをデタッチ
      2. 証明書のDeactivate
    • “モノ”
    • ポリシ
  • IAMロール
  • Amazon ESインスタンス (課金されるので注意)

自習室

自習室: SORACOM BeamでAWS IoTの認証処理をオフロード

自習室: SORACOM BeamでAWS IoTの認証処理をオフロード

自習室: AWS IoTのThing Shadowでパトライトを制御する

自習室: AWS IoTのThing Shadowでパトライトを制御する

センサーデータフォーマット

センサーデータは、BX1を通過すると下記のようなJSONデータとなります
このフォーマットをAWS IoT内のRule Engineや、Lambdaで処理することが可能です
(jqを使って整形済み。コメントは付与されません)
富士通コンポーネント社製 温度・加速度センサーデバイス “FWM8BLZ02”
{
  "deviceId": "e73a40839d8a",              // BX1の設定画面で設定したデバイスID (BX1で付与)
  "time": "2016-03-09T18:15:53.764+0900",  // 計測日時 (BX1で付与)
  "temperature": 27.22,                    // 温度 ℃
  "accelX": 0.092,                         // X方向 加速度 G
  "accelY": -0.952,                        // Y方向 加速度 G
  "accelZ": -0.113                         // Z方向 加速度 G
}

BX1の”AWSIOT”経由でデータ送信された場合、 {state: {reported: DATA}} としたAWS IoTのDevice Shadowのフォーマットに変形されます

{
  "state": {
    "reported": {
      "deviceId": "e73a40839d8a",
      "time": "2016-03-09T18:15:53.764+0900",
      "temperature": 27.22,
      "accelX": 0.092,
      "accelY": -0.952,
      "accelZ": -0.113
    }
  }
}
Texas Instruments社製 多機能/開発用センサー SensorTag CC2541DK
{
  "deviceId": "5c313ec027e1", // BX1の設定画面で設定したデバイスID (BX1で付与)
  "humidity": 40.7,           // 湿度 %
  "temperature": 28.6,        // 温度 ℃ (湿度センサー内)
  "objectTemp": 23.8,         // 物体温度 ℃
  "ambientTemp": 28.4,        // 周辺温度 ℃
  "gyroX": -1.4,              // ジャイロ(X軸) deg/s <角速度>
  "gyroY": 4,                 // ジャイロ(Y軸) deg/s
  "gyroZ": 0.2,               // ジャイロ(Z軸) deg/s
  "pressure": 1015.6,         // 気圧 hPa
  "accelX": 0.1,              // 加速度(X軸) G
  "accelY": 0.3,              // 加速度(Y軸) G
  "accelZ": 3.8,              // 加速度(Z軸) G
  "magX": -53.9,              // 地磁気(X軸) μT <テスラ>
  "magY": -5.2,               // 地磁気(Y軸) μT
  "magZ": 102.7,              // 地磁気(Z軸) μT
  "time": "2015-11-19T10:29:20.529+0900" // 計測日時(BX1で付与)
}

BX1の”AWSIOT”経由でデータ送信された場合、 {state: {reported: DATA}} としたAWS IoTのDevice Shadowのフォーマットに変形されます

{
  "state": {
    "reported": {
      "deviceId": "5c313ec027e1",
      "humidity": 40.7,
      "temperature": 28.6,
      "objectTemp": 23.8,
      "ambientTemp": 28.4,
      "gyroX": -1.4,
      "gyroY": 4,
      "gyroZ": 0.2,
      "pressure": 1015.6,
      "accelX": 0.1,
      "accelY": 0.3,
      "accelZ": 3.8,
      "magX": -53.9,
      "magY": -5.2,
      "magZ": 102.7,
      "time": "2015-11-19T10:29:20.529+0900"
    }
  }
}

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

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

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

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

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

screen /dev/ttyUSB0 115200

自習室: SORACOM BeamでAWS IoTの認証処理をオフロード

本章のゴール: BX1の設定をAWS IoTからMQTTに切り替えてもAWS IoTならびにAmazon ESへのデータ送信がされる

作業の位置づけ;

_images/bx1_07_overview.png

SORACOM Beamとは?

IoT デバイスにかかる暗号化等の高負荷処理や接続先の設定といった面倒な処理を、クラウドにオフロードできるサービスです

Beamでサポートしている機能は下記のとおりです (2016年5月現在)

  • プロトコル変換 (証明書添付含む)
  • 接続先切り替え

詳細は SORACOM Beamのページ をご覧ください

自習室で行うこと

BX1とAWS IoTの接続 では、AWS IoTに接続するために必要な証明書(ファイル3つ)をBX1に格納していました

この証明書をBX1からSORACOMへ移動し、SORACOM Beamを使ってAWS IoTに接続します

前提条件

すでにハンズオンすべてを完了させており、センサーデータがAmazon Elasticsearch Serviceの Kibana上で確認できることが必要です

BX1の仕様上の注意点

SORACOM Beamへの切り替えに先立って、BX1の仕様上の注意を確認します

  1. AWS IoT向けとMQTTサーバ向けでデータのpayloadフォーマットが違います。詳細は センサーデータフォーマット をご覧ください
  2. MQTTサーバ向けの送信先トピックは <トピックプレフィックス>/<ユニークID(MQTT)> と、ユニークIDが自動的に付与されます

BX1: AWS IoTへの送信を停止

AWS IoTへの送信を停止します

  1. WebUIから [サービス] - [収集設定] を表示
  2. AWS IoT使用しない に変更
  3. [保存] をクリック

保存するとAWS IoTへの送信を即時停止します (BX1内のグラフ描画は継続されます)

Kibana上にも送信されていないことを確認してください

注釈

デバイス情報送信設定送信先設定 には AWS IoTの設定情報が残っていますが、使用されません

AWS: AWS IoTにルールを追加する

AWS IoTにルールを追加します

BX1固有の注意点にも記載したとおり、MQTTの送信先トピックが awsiot_handson/sensors/<ユニークID(MQTT)> となったため、これを受けられるAWS IoTのルールを新設します

ルールの作成の仕方は ルールの作成 を参照してください

Name awsiot_handson_rule1
Description awsiot_handson_rule1
SQL version 2016-03-23-beta
Attribute *
Topic filter awsiot_handson/sensors/#
Condition <なにも入力しません>
Choosen an action Amazon Elasticsearch Service
Domain name awsiot-handson-es
ID ${newuuid()}
Index awsiot_handson_w_beam
Type fwm8blz02
Role awsiot_handson_put_to_es

ルールの作成 と違う部分を特に強調してあります

SORACOM: 証明書ストアへX.509証明書の登録

ソラコムのコンソールから [セキュリティ] - [認証情報ストア] - [認証情報を登録] を順にクリック

各項目は下記のようにしてください

認証情報ID AWSIoT_cert_0
概要 AWSIoT cert 0
種別 X.509 証明書
秘密鍵 (key) <CertID>-private.pem.key の中身をペースト
証明書 (cert) <CertID>-certificate.pem.crt の中身をペースト
CA証明局 VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem の中身をペースト
_images/bx1_07_add_cert1.png

設定を確認したら [登録] をクリック

無事登録されると認証情報ストアに下図のように表示されます

_images/bx1_07_add_cert2.png

注釈

認証情報ストアには複数の認証情報を格納することができるほか、内容の編集・削除も可能です

SORACOM: SIMグループの作成とBeamの設定

SIMグループの作成

ソラコムのコンソールから [グループ] - [追加] を順にクリック

各項目は下記のようにしてください

グループ名 mqtt2awsiot
_images/bx1_07_add_group.png

設定を確認したら [グループ作成] をクリック

SORACOM Beamの設定

ソラコムのコンソールから [グループ] - [mqtt2awsiot] - [SORACOM Beam 設定] を順にクリック

[+] をクリックし、リストの中から [MQTT エントリポイント] をクリック

各項目は下記のようにしてください

設定名 AWS IoT
転送先 / プロトコル MQTTS
転送先 / ホスト名 <AWS IoT エンドポイント>
転送先 / ポート番号 8883
転送先 / ユーザ名 <空>
転送先 / パスワード <空>
転送先 / 証明書 ON
転送先 / 証明書タイプ AWSIoT_cert_0 (AWSIoT cert 0)
_images/bx1_07_beam_conf1.png

設定を確認したら [保存] をクリック

無事登録されると下図のように表示されます

_images/bx1_07_beam_conf2.png

SORACOM: SIMをグループに所属させる

ソラコムのコンソールから [SIM管理] をクリック

さきほど作成した mqtt2awsiot グループへ所属させたいSIMのチェックボックスをつけたあと、 [操作] - [所属グループ変更] をクリック

_images/bx1_07_join_group1.png

グループ変更画面で mqtt2awsiot を選択し [グループ変更] をクリック

_images/bx1_07_join_group2.png

無事変更されると下図のように表示されます

_images/bx1_07_join_group3.png

以上の操作で対象のSIMから beam.soracom.io へのMQTT通信は、AWS IoTへ X.509証明書によるMQTTS通信として転送されるようになりました

BX1: データをSORACOM Beam(MQTT)へ送信

これまでのハンズオンではBX1はAWS IoTへ直接MQTTS通信していたので、それを beam.soracom.io へMQTT通信するように切り替えます

収集設定 / AWS IoTのOFFとMQTTサーバへの設定

BX1のWebUIから [サービス] - [収集設定] を表示

下記の通りにします

  1. MQTTサーバ を [使用する] に変更し、下記の通り設定します
インターバル[sec] 2
送信ホスト beam.soracom.io
送信先ポート 1883
QoS 1
クライアントID bx1-mqtt-client0
トピックプレフィックス awsiot_handson/sensors
ユーザ名 <空>
パスワード <空>
プロトコル TCP
_images/bx1_07_bx1_conf1.png

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

収集設定 / センサデータの送信先設定

dev_le_0000001送信先設定MQTT にチェックを付けます

※ユニークID(MQTT) の項目が増え、クライアントID(AWS IoT)と同じ値が入ります

_images/bx1_07_bx1_conf2.png

以上を確認したら保存してください。保存と同時に(若干のラグがありますが)送信が開始されます

Kibana上での確認

新規に awsiot_handson_w_beam というIndexに格納するようにしているので、そちらを参照するように変更するのをお忘れなく

まとめ

SORACOM Beamを使用することで、証明書ファイルをデバイス(BX1)に格納せずともAWS IoTへアクセスできるようになりました

デバイスへの設定が少なくて済むというのは、大量のデバイスを展開する際にもコスト面で有利です

あとかたづけ

作成したリソースは削除しておきましょう

  • SORACOM上
    1. SIMのグループを解除
    2. SIMグループを削除
    3. 認証ストアの削除
  • AWS上
    1. Amazon Elasticsearchインスタンス
    2. AWS IoT モノ、証明書、ポリシー、ルール
    3. IAMロール

トラブルシュート

SORACOM Beamには転送されたデータが正しく転送されたか否かを確認する方法がありません (2016年5月現在)

そのため、うまく転送されていないと思われる場合は各種設定を見直すようにしてください

とくに見直すポイントは下記です

  1. SORACOM: 証明書ストアへ保存した証明書や秘密鍵
  2. AWS: AWS IoTのエンドポイント

転送がうまく作動していれば、あとはAWSのCloudWatchでログが確認できるので、処置可能です

自習室: AWS IoTのThing Shadowでパトライトを制御する

本章のゴール: Thing Shadowの適用場面、構成コンポーネントやデータフローの理解

本章は、最初にAWS IoTのThing Shadowのデモに触れてみることで全体像を確認し、その次に各コンポーネントの解説を行います

デモ

https://s3-ap-northeast-1.amazonaws.com/ma2shita/patlite_control_w_awsiot.html

※デモはセットアップが完了していないと機能しません。詳しくはハンズオンスタッフまで

_images/bx1_08_demo_screenshot.png

デモ画面は左側に現在のパトライトの状態、右側にパトライトに対してのライトON/OFF制御を持っています

  1. まずは右側のON/OFF制御を行ってみましょう
  2. 気づいた事を話し合ってみましょう

概要

システムの概要は下図の通りです

_images/bx1_08_overview.png

デモの画面は一番右の Web Browser になります

コンポーネントとデータフロー

概要の詳細化を行い、コンポーネントとデータフローを記載したのが下図です

_images/bx1_08_detailview.png
  • 通信の部
    • Patlite <NHS-3FB1> ←→ BX1 との通信は SNMP
      • 認証/認可: SNMPの機構を使用
    • BX1 ←→ AWS IOT との通信は MQTTS
      • 認証: AWS IoTが払いだしたX.509証明書を使用
      • 認可: X.509証明書に割り当てたAWS IoTのpolicyを使用
    • AWS IoT ←→ Web Browser との通信は Websocket
      • 認証: なし(CognitoのUnauth(=Anonymous)を使用)
      • 認可: Cognitoを使用しWeb Browserに一時的なIAMロールを割り当て、AWS IoT(のdataアクセス)に対して権限を付与
  • プログラムの部
    • BX1に2つのプログラムを配置
      • reporter.rb
        • 定期的にPatliteのステータスを取得し、AWS IoTへ reported を送信する
      • commander.rb
        • /update/delta を監視し、データが着信したら内容に応じてPatliteへコマンドを送信する
    • Web BrowserにJavascriptアプリケーションを実行させる
  • データフローの部
    • 緑の線は、reporter.rbを起点に /update/documents を通じてWeb Browserの内容が更新されるまで
    • オレンジの線は、Web Browserへの入力を起点に /update/delta を通じてPatliteにコマンドが送信されるまで
システム設計のポイント

双方向システムのポイントは、データフローがループ構成になるように設計するべきです

  • ただし、無限ループを防止するためにもブレーカーを必ず設置しましょう。本デモでは人間をブレーカー代わりにしています
  • ループ外からの操作にも対応できるようにするべきです

双方向が不要ならば緑の線もしくはオレンジの線の上のコンポーネントのみで十分です。しかしながら、その場合にThing Shadowを使う理由が見当たりません

  • AWS IoTを MQTTブローカー として見るか ステートマシン として位置づけるか、これがThing Shadowを使う1つめの見極めポイントになります
  • Thing Shadowの最大の特徴はデバイス操作の要求に対し 本当に操作すべき対象の抽出``/update/delta`` への差分抽出 で実現/実装済みということです。この差分抽出は 現状(=reported)要求(=desired) という2つが必要となります。このような機構が不要であれば Thing Shadow を使用する必要はありません (e.g. センサーデータのアップロードにのみAWS IoTを使う場合)

commander.rbによる実行結果はreporter.rbに回収させるようにするのが、デバイスの稼働状況を確認するためにも推奨されます

プログラム改造のポイント

Patliteを用意できない場合もありますので、その場合は reporter.rb や commander.rb を改造する必要が出てきます

改造ポイントはデバイス通信部になります

  • reporter.rb では Flow: Fetch state from real-device の部分
  • commander.rb では Flow: Execute command to real-device の部分

<NHS-3FB1>は内部にステートを持ち、SNMP でステートの読み出しができる「ステートフル・デバイス」であったため、reporter.rbは ポーリング・パターン※1 で実装しました

しかしRS-232CといったI/FなデバイスはデータがI/Fを通じて流れてくる「ストリーム・デバイス」であることが多いです。この場合は リスニング・パターン※2 を実装する必要があります

  • ※1 定期的にデータを取得しに行く定期実行型
  • ※2 TCPソケットのようなポート待受型

全体構成 へ進む

時間配分

  1. [10m] 冒頭説明
  2. [20m] BX1のWi-Fi AP設定とSORACOM Air(3Gネットワーク)設定
  3. [20m] センサーとBX1の接続
  4. [10m] Amazon ESのインスタンス作成と設定
  5. [20m] AWS IoTの設定
  6. [20m] BX1とAWS IoTの接続
  7. [10m] 片付け&まとめ

※冒頭説明から片付け&まとめまで約120分のコンテンツです

  • [20m] 自習室: SORACOM BeamでAWS IoTの認証処理をオフロード
  • [20m] 自習室: Thing Shadowでパトライトを制御