Syntax Error.

[Sy] AWS IoT Device SDK for JavaScript を使って MQTTS で publish するサンプル

2018/01/13 (更新: 2018/01/14)

これまで AWS IoT Device SDK for JavaScript に付属しているサンプル・アプリケーションを使って動作確認をしてきましたが、今回は MQTTSpublish する簡単なコードを書いてみます。

前回までの流れはこちらを。

⇒ [Sy] AWS IoT Device SDK for JavaScript を Mac にインストールして サンプルアプリケーションを動かす(device-example.js) ⇒ [Sy] AWS IoT Device SDK for JavaScript のサンプルアプリケーションの処理を理解する(device-example.js) ⇒ [Sy] AWS IoT Device SDK for JavaScript のサンプルアプリケーション(device-example.js)のメッセージを管理コンソール上で subscribe する

1. aws-iot-device-sdk をインストールする

まずは作業用のディレクトリを作って、 aws-iot-device-sdknpm でインストールします。

$ mkdir aws-iot-test
$ cd aws-iot-test
$ npm install aws-iot-device-sdk
$ cd aws-iot-device-sdk
$ npm install
$ cd ..

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

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

3. publish するためのコードを書く

publish.js という名前(もちろん任意でOK)で以下のコードを保存します。

$ vim publish.js
(publish.js)

var awsIot = require('aws-iot-device-sdk');

var device = awsIot.device({
   keyPath: './certs/8b29044466-private.pem.key',
  certPath: './certs/8b29044466-certificate.pem.crt',
    caPath: './certs/VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem',
  clientId: 'nouser' + (Math.floor((Math.random() * 100000) + 1)),
      host: 'xxxxxxxxxxxxxx.iot.ap-northeast-1.amazonaws.com'
});

device.on('connect', function() {
  console.log('connect');
  setInterval(function() {
    device.publish('test', JSON.stringify({ value: Math.random() * 100}));
  }, 5000);
});

コード中の host や証明書などのファイル名は環境に合わせて変更してください。

このコードでやっていることは、 「testトピックに5秒ごとにランダムな数値を publish (送信)する」というシンプルなものです。

これで必要なファイルはすべて揃いました。

ディレクトリ・ファイルの構成はこうなっています。

aws-iot-test/
 ├ certs/
 │  ├ 8b29044466-certificate.pem.crt
 │  ├ 8b29044466-private.pem.key
 │  └ VeriSign-Class 3-Public-Primary-Certification-Authority-G5.pem
 ├ node_modules/
 │  ├ ・
 │  ├ ・
 │  ├ aws-iot-device-sdk/
 │  ├ ・
 │  └ ・
 └ publish.js

4. 実行&管理コンソール上で確認

publish.js を実行する前に、 AWS IoT の管理コンソールを開いて、 testトピックを subscribe (受信) してメッセージを画面上で確認できるようにしておきます。

ブラウザは横に置いといて、ターミナルで publish.js を実行します。

$ node publish.js
connect

ターミナルでは connect しか表示されませんが、5秒ごとにメッセージを publish しています。

そして管理コンソール上で、以下のようにメッセージが5秒おきに表示されれば成功です。

AWS IoT MQTT クライアント(Macからpublish)

(2018/01/14 追記)

今回 publish したメッセージを subscribe するサンプルはこちら。

⇒ [Sy] AWS IoT Device SDK for JavaScript を使って MQTTS で subscribe するサンプル