Node-REDからAWS IoTにメッセージをPublishする

需要がどの程度あるか分かりませんが、Node-REDのHTTP Requestなどで受けたデータをAWS IoTにMQTTで投げる(つまりNode-REDがHTTPとMQTTのプロトコル変換を行う)方法についてまとめます。

AWS IoTにモノを作成

まず、AWS IoT Coreを開いて、モノを作成します。

「単一のモノを作成する」で良いでしょう。

モノの名前を付けます。ここで付けた名前がMQTTでPublishする際のClientIDになります。タイプとグループは任意で構いません。

モノの証明書を作成します。MQTTでPublishする際に必要となります。「1-Click証明書作成」が簡単で良いでしょう。

作成した証明書のダウンロードを行います。ルートCAのダウンロードも忘れないように。

モノを作成した後に、ポリシーのアタッチが続きますが、一旦「完了」で構いません。

AWS IoTのポリシー作成とアタッチ

次に、安全性>ポリシータブからポリシーを作成します。

ポリシーの名前を付けます。

ステートメントはアドバンスモードを選択し、下記のJSONを入力します。

{
  "Version": "2012-10-17",
  "Statement": [
	{
	  "Effect": "Allow",
	  "Action": "iot:*",
	  "Resource": "*"
	}
  ]
}

次に、安全性>ポリシーのタブから安全性>証明書のタブに移って、先ほど作成した証明書を選択し、ポリシーをアタッチします。

これでAWS IoT側の準備は完了です。

いよいよNode-RED

Node-REDで下図のようなフローを作成します。

設定が最も必要なのはMQTT Outのノードです。

「新規にmqtt brokerを追加」を選択し、編集ボタンをクリックします。

ここで、MQTT Brokerと言っているのがAWS IoT Coreです。ちなみに、IBM CloudにもIoTサービスがありますので、そちらを使うこともできます。IBM Cloud上でNode-REDを使っている場合は、ibmiotノードを使えば簡単にPublishすることができます。

AWS IoTでの説明に戻ります。サーバの設定とTLSの設定を行います。

サーバは、AWS IoT Coreのモノの画面から操作タブを開き、HTTPSのところに書いてあるサーバを指定します(HTTPSを使うわけではないのですが、同じサーバを指定すすればMQTTも動作します)。ポートはセキュアMQTTなので8883です。

TLS設定は、先ほどダウンロードした証明書をアップロードします。

次にMQTT Outの前にあるFunctionノードで、Publishするメッセージとトピックを指定します。

このようなJavaScriptのコードです。Publishされるメッセージはmsg.payloadに、トピックはmsg.topicで指定します。

timestamp = msg.payload;
msg = {
	'payload': {
		'timestamp': timestamp
	},
	'topic': 'gw/1001/timestamp'
}
return msg;

Injectを実行する

ここまでに作成したフローをデプロイし、Injectを行います。

あらかじめ、AWS IoTのテスト画面でgw/1001/timestampトピックをサブスクライブしておくと、このようにメッセージが表示されます。

今回はInjectノードを使ってタイムスタンプの値をPublishするだけですが、HTTP Requestに変えたりすると頭書のような要件を実現することができるでしょう。

この記事を書いた人

井上 研一

経済産業省推進資格ITコーディネータ/ITエンジニア/ブロガー。
井上研一事務所代表、株式会社ビビンコ代表取締役、一般社団法人ITC-Pro東京理事。
北九州市出身、横浜市在住。 AIやIoTに強いITコーディネータとして活動中。著書に「初めてのWatson」、「ワトソンで体感する人工知能」など。セミナーや研修講師での登壇も多数。

この記事が気に入ったら
いいね!しよう

最新の情報をお届けします