[Sy] AWS IoT Device SDK for JavaScript を使って MQTTS で subscribe するサンプル
前回 AWS IoT Device SDK for JavaScript を使って MQTTS で publish しました。今回はそのメッセージを 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.js
と subscribe.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}