Syntax Error.

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

2018/01/14

前回 AWS IoT Device SDK for JavaScript を使って MQTTSpublish しました。今回はそのメッセージを subscribe するサンプルです。

前回書いたメッセージを publish するサンプルについての記事はこちら。

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

ちょっとだけおさらいすると、以下のコードを 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: 'a14n721pru1qdr.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);
});

publish.jsでやっていることは、 「testトピックに5秒ごとにランダムな数値を publish (送信)する」

ということでした。

前回の記事では、メッセージの確認は AWS IoT の管理コンソール上でやってみました。

今回は、 subscribe.js というコードを新しく作って、それを Mac 上で動作させることで testトピックに publish されたメッセージを subscribe(受信) します。

環境の準備などは、前回までの記事を参照してください。

1. subscribe するためのコードを書く

subscribe.js という名前でコードを作成します。階層は publish.js と同じにしています。

$ vim subscribe.js
(subscribe.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');
  device.subscribe('test');
});

device.on('message', function(topic, payload) {
  console.log(payload.toString());
});

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

前回からのディレクトリ・ファイルの構成は以下のようになります。

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
 └ subscribe.js

2. 実行&確認

ターミナルを2つ(以降、ターミナル1/ターミナル2と呼びます)立ち上げ、以下のようにそれぞれ publish.jssubscribe.js を起動します。

(ターミナル1)

$ node publish.js
connect
(ターミナル2)
$ node subscribe.js
connect

起動したタイミングでは、どちらも connect としか出力されません。

ここまでで、次のような状態になります。

ターミナル1

testトピックに5秒おきにランダムな数値を publish(送信)し続ける。

ターミナル2

testトピックを subscribe(受信)し、メッセージを取得できれば出力。


しばらく待っていると、ターミナル2(subscribe)の方にターミナル1(publish)から送信されたメッセージが出力されます。

(ターミナル2)

$ node subscribe.js
connect
{"value":93.39810878799571}
{"value":3.5547180002844403}
{"value":87.4510435350855}