AWS IoT Core に Node-RED から標準の mqtt ノードでつなぐメモ

AWS IoT Core に Node-RED から標準の mqtt ノードでつなぐメモです。

背景

MQTT Explorer で AWS IoT Core につなぐときの設定メモ

最近、ようやく AWS IoT Core での素の MQTTS 接続について MQTT Explorer などで慣れてきたので Node-RED 標準の mqtt ノードでもつないでみます。

今回は、この記事のとおり MQTT Explorer で前もって成功した AWS IoT Core の設定や証明書がある前提で進めます。

また、Node-RED に詳しい 上野(@utaani)さん に、ちょっと前に「Node-RED 標準の mqtt ノードでも、たぶんいけますよね~?」と質問して、バージョン 3.1.1 はつないだ経験があっていけますよ、と伺っていたので、一定の成功イメージがある中で進めることがました。感謝です。

バージョン

image

Node-RED のバージョンは 3.0.2 ですが、おそらく以前のバージョンでも今回紹介する設定項目があるバージョンであればうまくいくとおもいます。

Windows ローカル Node-RED と Azure VM に置いた Node-RED で試しました。

設定してみる

image

このように、 mqtt in ノードに debug ノードをつないだもの、inject ノードに mqtt out ノードを加えたシンプルなフローを作成します。

image

mqtt out ノードで MQTT の接続設定をしてみます。

image

サーバの項目で新規に mqtt-broker を追加を選択して右の鉛筆ボタンをクリックして設定します。

image

接続タブの設定です。

  • 名前
    • 任意の名前
  • サーバ
    • 今回つなげたい AWS IoT Core のエンドポイントを設定
  • ポート
    • 8883
  • TLS を使用
    • チェックして「新規に tls-config を追加」を選択

ここまで設定したら「新規に tls-config を追加」を選択した横の鉛筆ボタンをクリックして TLS 設定をします。

image

  • 証明書
    • AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が -certificate.pem.crt ファイルを指定
  • 秘密鍵
    • AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が -private.pem.key ファイルを指定
  • CA 証明書
    • AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が AmazonRootCA1.pem ファイルを指定

TLS の設定はこのように AWS IoT Core のデバイス証明書作成時にダウンロードしたファイルを設定します。設定出来たら更新ボタンをクリックします。接続タブに戻ります。

image

セキュリティタブは、ユーザ名とパスワードは無記名です。設定出来たら更新ボタンをクリックします。

image

トピックは test で QoS は空欄、保持も空欄です。完了ボタンをクリックします。

image

mqtt in ノードの設定をします。

image

まず、サーバを mqtt out ノードで作成した MQTT 接続設定にします。私の場合は AWS IoT としたのでその設定です。

QoS がデフォルトで 2 ですが、これをこのままにしていると AWS IoT Core 側で QoS が 2 であることでエラーになって切断されることに悩まされるので 0 にします。

image

トピックは、一旦ワイルドカードで # で取るようにして、QoS を 0 に明示的に設定します。出力は、この自動判定で OK です。

image

ということでフローができました。デプロイして動かしてみます。

動かしてみる

image

デプロイすると無事 mqtt in ノードも mqtt out ノードも接続済になっています!

image

タイムスタンプと書かれている inject ノードのボタンをクリックしてデータを発行してみましょう。

image

無事 mqtt in ノードがデータをキャッチしてデバックタブでデータが確認できます。

これでAWS IoT Core に Node-RED から標準の mqtt ノードでつなぐことができました!