Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9225

【今日から始めるIoT】AWS IoT Coreでpub/subする

$
0
0
はじめに 30代未経験からエンジニアを目指して勉強中のYNと申します。 IoTの場面では、多対多の双方向通信が必要となります。これはWeb開発で一般的に使われる素のHTTP通信で実現することはできず、 MQTT WebSocket MQTT over WebSocket といった双方向通信プロトコルを使う必要があります。 詳しくはコチラにまとめました。 今回は AWS IoT CoreによるMQTTブローカーのマネージドサービス使って2つのクライアント間でMQTTメッセージのやり取りを行います。 AWSコンソールで「モノ」を作成する AWS IoT Coreのコンソール画面で「モノ」を登録します。 証明書の種類の選択 このとき、「新しい証明書を自動生成 (推奨)」を選択します。 これが一番簡単です。他の選択肢についてこちらの動画の説明が分かりやすいです。 policyの設定 ここが初学者には一番難しい部分でしょう。 今回client1でpublishしたメッセージをclient2でsubscribeするためには、下記のjsonを参考にポリシーを設定して証明書にアタッチすることが必要です。 us-east-2と123456780000の部分をそれぞれ自身のリージョンとアカウントナンバーに書き換えてください。 コンソール画面でアドバンストモードを選べばjsonをそのまま編集することができます。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-east-2:123456780000:client/client1", "arn:aws:iot:us-east-2:123456780000:client/client2" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-east-2:123456780000:topic/topic1" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-east-2:123456780000:topicfilter/topic1" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-east-2:123456780000:topic/topic1" ] } ] } 詳しくはこちらを参照ください 証明書をダウンロード 先ほどのポリシーをアタッチした証明書を任意の場所にダウンロードします。 ポリシーは後から変更可能です。 クライアントのコードを書く クラウアントのコードを書きます。aws-iot-device-sdkを使えばmqtt.jsの内容をラクチンに書けます。 公式ドキュメントはこちら client1によるpublish client1.js // AWS IoT DeviceSDKの利用 const awsIot = require('aws-iot-device-sdk'); // 秘密鍵、証明書などの設定 const device = awsIot.device({ keyPath: './certs/xxxxxxx-private.pem.key', // ダウンロードした秘密鍵 certPath: './certs/xxxxxxx-certificate.pem.crt', // ダウンロードした公開鍵 caPath: './certs/AmazonRootCA1.cer', // ダウンロードしたルート証明書 clientId: 'client1', // ポリシーで許可したユニークなクライアント名 host: 'xxxxx.iot.us-east-2.amazonaws.com' // エンドポイント。コンソール画面でチェックできる }); let count = 0; // 通信確立した後、5秒ごとに呼び出されるイベント device.on('connect', function () { console.log('connect'); setInterval(function () { count++; device.publish('topic1', `hello!! ${count}`); // topic名もポリシーで許可したものを設定 console.log(`published message for ${count} time`); }, 5000); }); client2によるsubscribe client2.js const awsIot = require('aws-iot-device-sdk'); // 秘密鍵、証明書などの設定 const device = awsIot.device({ keyPath: './certs/xxxxxxx-private.pem.key', certPath: './certs/xxxxxxx-certificate.pem.crt', caPath: './certs/AmazonRootCA1.cer', clientId: 'client2', host: 'xxxxx.iot.us-east-2.amazonaws.com' }); // 通信確立時 device.on('connect', function () { console.log('connect'); device.subscribe('topic1'); // topic1のsubscribeとrecieveをポリシーで許可する必要がある }); // subscribeしたトピックにpublishされた時のイベント device.on('message', function (topic, payload) { console.log('got message => ', topic, payload.toString()); }); run code!! これでメッセージの送受信ができます。簡単でしたね。 node client1.js node client2.js

Viewing all articles
Browse latest Browse all 9225

Trending Articles