AWS IoT Core に Node-RED から標準の mqtt ノードでつなぐメモです。
背景
最近、ようやく AWS IoT Core での素の MQTTS 接続について MQTT Explorer などで慣れてきたので Node-RED 標準の mqtt ノードでもつないでみます。
今回は、この記事のとおり MQTT Explorer で前もって成功した AWS IoT Core の設定や証明書がある前提で進めます。
また、Node-RED に詳しい 上野(@utaani)さん に、ちょっと前に「Node-RED 標準の mqtt ノードでも、たぶんいけますよね~?」と質問して、バージョン 3.1.1 はつないだ経験があっていけますよ、と伺っていたので、一定の成功イメージがある中で進めることがました。感謝です。
バージョン
Node-RED のバージョンは 3.0.2 ですが、おそらく以前のバージョンでも今回紹介する設定項目があるバージョンであればうまくいくとおもいます。
Windows ローカル Node-RED と Azure VM に置いた Node-RED で試しました。
設定してみる
このように、 mqtt in ノードに debug ノードをつないだもの、inject ノードに mqtt out ノードを加えたシンプルなフローを作成します。
mqtt out ノードで MQTT の接続設定をしてみます。
サーバの項目で新規に mqtt-broker を追加を選択して右の鉛筆ボタンをクリックして設定します。
接続タブの設定です。
- 名前
- 任意の名前
- サーバ
- 今回つなげたい AWS IoT Core のエンドポイントを設定
- ポート
- 8883
- TLS を使用
- チェックして「新規に tls-config を追加」を選択
ここまで設定したら「新規に tls-config を追加」を選択した横の鉛筆ボタンをクリックして TLS 設定をします。
- 証明書
- AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が -certificate.pem.crt ファイルを指定
- 秘密鍵
- AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が -private.pem.key ファイルを指定
- CA 証明書
- AWS IoT Core のデバイス証明書作成時にダウンロードした末尾が AmazonRootCA1.pem ファイルを指定
TLS の設定はこのように AWS IoT Core のデバイス証明書作成時にダウンロードしたファイルを設定します。設定出来たら更新ボタンをクリックします。接続タブに戻ります。
セキュリティタブは、ユーザ名とパスワードは無記名です。設定出来たら更新ボタンをクリックします。
トピックは test で QoS は空欄、保持も空欄です。完了ボタンをクリックします。
mqtt in ノードの設定をします。
まず、サーバを mqtt out ノードで作成した MQTT 接続設定にします。私の場合は AWS IoT としたのでその設定です。
QoS がデフォルトで 2 ですが、これをこのままにしていると AWS IoT Core 側で QoS が 2 であることでエラーになって切断されることに悩まされるので 0 にします。
トピックは、一旦ワイルドカードで #
で取るようにして、QoS を 0 に明示的に設定します。出力は、この自動判定で OK です。
ということでフローができました。デプロイして動かしてみます。
動かしてみる
デプロイすると無事 mqtt in ノードも mqtt out ノードも接続済になっています!
タイムスタンプと書かれている inject ノードのボタンをクリックしてデータを発行してみましょう。
無事 mqtt in ノードがデータをキャッチしてデバックタブでデータが確認できます。
これでAWS IoT Core に Node-RED から標準の mqtt ノードでつなぐことができました!