Syntax Error.

[Sy] AWS IoT Device SDK for JavaScript を Mac にインストールして サンプルアプリケーションを動かす(device-example.js)

2017/12/31 (更新: 2018/01/05)

AWS IoT Device SDK for JavaScript を Mac にインストールしてサンプルアプリケーションの device-example.js を動かしてみます。

1. インストール

SDK のインストールは npm を使います。

まず適当にディレクトリを作成して移動しておきます。

$ mkdir aws-iot-test
$ cd aws-iot-test

npm を使って aws-iot-device-sdk をインストールします。

$ npm install aws-iot-device-sdk

$ npm ls --depth=0
/Users/utano320/Documents/Develop/aws-iot-test
└── aws-iot-device-sdk@2.2.0

2. device-example.js を動かすための準備

aws-iot-device-sdk にはいくつかのサンプルアプリケーションがあり、それらを動かすために準備が必要です。

今回は、 device-example.js を動かしてみますので、そのために必要な準備をしていきます。

2-1. 証明書などを配置する

AWS IoT のコンソール画面からモノの登録を行い、ダウンロードした証明書を certs ディレクトリに配置します。

モノの登録などについては、若干画面遷移などは違いますがこちらを参考に行いました。

⇒ AWS IoT の開始方法 - AWS IoT

コンソール画面から証明書などをダウンロードしおきます。

次に以下のディレクトリを作成します。(別に名前はなんでも良いです)

$ mkdir certs

AWS IoT からダウンロードした証明書などを certs ディレクトリに配置します。

  • 秘密鍵(privateKey) : 例)8b29044466-private.pem.key
  • 証明書 (clientCert) : 例)8b29044466-certificate.pem.crt
  • CAルート証明書 (caCert) : 例)VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem

証明書を配置し終わったら、ディレクトリとファイルが次のようになっていればOKです。

$ ls
certs node_modules

$ ls certs
8b29044466-certificate.pem.crt
8b29044466-private.pem.key
VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem

2-2. 設定ファイルに証明書のファイル名を記載する

サンプルアプリケーションを実行するために、今置いた証明書などのファイル名を ezamples/lib/cmdline.js の102行目あたりに記載しておきます。

(以降の操作は、 node_modules/aws-iot-device-sdk/のディレクトリ配下で行うので、ここで移動しておきます。)

$ cd node_modules/aws-iot-device-sdk/

$ vim examples/lib/cmdline.js
(cmdline.js 102行目あたり)

  ・
  ・
  ・
      default: {
         protocol: 'mqtts',
         clientId: clientIdDefault,
         privateKey: 'private.pem.key',
         clientCert: 'certificate.pem.crt',
         caCert: 'root-CA.crt',
         testMode: 1,
         /* milliseconds */
         baseReconnectTimeMs: 4000,
         /* seconds */
         keepAlive: 300,
         /* milliseconds */
         delay: 4000,
         Debug: false
      },
  ・
  ・
  ・

 ↓ (privateKey, clientCert, caCertのところを変える)

  ・
  ・
  ・
         privateKey: '8b29044466-private.pem.key',
         clientCert: '8b29044466-certificate.pem.crt',
         caCert: 'VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem',
  ・
  ・
  ・

2-3. エンドポイントを取得

AWS IoT のコンソール画面から、 HTTPS のエンドポイントをコピーしておきます。

AWS IoT > 管理 > モノ > (対象のモノを選択) ⇒ 操作 ⇒ HTTPS にあります)

2-4. aws-iot-device-sdk ディレクトリで npm install

(2018/01/05追記)

aws-iot-devicd-sdk ディレクトリで npm install をして必要なパッケージをインストールしておきます。

$ npm install

ここまでで準備は完了です。

3. device-example.js を実行する

ではサンプルアプリケーションの1つの、 device-example.js を実行してみます。

サンプルアプリケーションは、ターミナルを2つ(以降、ターミナル1、ターミナル2と呼びます)立ち上げて、動作確認をしていくことになります。

まずターミナル1で以下のコマンドを実行します。

(ターミナル1)

$ node examples/device-example.js -f ../../certs --test-mode=1 -H xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com
connect

-f オプションは、証明書などを置いたディレクトリのパスを指定します。

-H オプションには、先ほどコピーしておいたエンドポイントをセットしてください。(xxxxxxの部分は英数字、ap-northeast-1 の部分は使っているリージョンによって変わります)

「connect」と出力されていれば、成功です。もしエラーが出る場合は、ここまでの設定をもう一度見直してみてください。

続いてターミナル2では --test-mode=2 にして実行します。

(ターミナル2)

$ node examples/device-example.js -f ../../certs --test-mode=2 -H xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com
connect

こちらも「connect」と出力されるはずです。

そしてちょっとだけ待っていると、ターミナル2とターミナル1に以下のような出力が一定間隔で出てきます。

(ターミナル2)

message topic_2 {"mode1Process":69}
message topic_2 {"mode1Process":70}
message topic_2 {"mode1Process":71}
(ターミナル1)

message topic_1 {"mode2Process":1}
message topic_1 {"mode2Process":2}
message topic_1 {"mode2Process":3}

出力される順番は、ターミナル2に1行出力されると、ターミナル1に1行出力される、というように交互になります。(ターミナル1とターミナル2での実行を同時に行うと、同じタイミングで出力されます)

これで動作確認は完了です。

(2018/1/4 追記) device-example.js のコードを読んで動きを確認しました。

⇒ [Sy] AWS IoT Device SDK for JavaScript のサンプルアプリケーションの処理を理解する(device-example.js)