MQTTノードを使う

ここのところずっとNode-REDのサンプルを見ながら各ノードの使い方を確認しています。頭出しの記事はこちらをご確認ください。今回はMQTTノードを使ってみます。私はMQTTについてはあまり詳しくなく、うっすらIoTの分野で使われていることを聞いたことがある程度です。まずはMQTTについて調べるところから開始しました。

MQTTの概要

Wikipediaによると、こんな感じの説明があります。
  • Message Queuing Telemetry Transportの略
  • TCP/IPによるPub/Sub型のデータ配信モデル
  • 軽量な通信電文
  • メッセージブローカーが必要

Pub/Sub型と言えば、トポロジー的にはAWSで言うところのSNSみたいなもんですかね。軽量なのでスペックの低いIoT機器でも扱いやすいということなのでしょう。だいたい理解しました。

ブローカーのインストールと起動

Node-REDのドキュメントに使い方の説明があるので、実際にやってみます。ブローカーが必要なので、まずはmosquittoなるものをインストールおよび起動します。ちなみに、Mac上で作業しています。

$ brew install mosquitto
$ mosquitto
1640008513: mosquitto version 2.0.14 starting
1640008513: Using default config.
1640008513: Starting in local only mode. Connections will only be possible from clients running on this machine.
1640008513: Create a configuration file which defines a listener to allow remote access.
1640008513: For more details see https://mosquitto.org/documentation/authentication-methods/
1640008513: Opening ipv4 listen socket on port 1883.
1640008513: Opening ipv6 listen socket on port 1883.
1640008513: mosquitto version 2.0.14 running
  
動いたようです。これでlocalhostの1883ポートでブローカーが待ち受けを開始しました。

MQTTノードを使ったフローの作成

いよいよ、フローを作っていきます。「mqtt in」ノードと「mqtt out」ノードを含めて以下のように配置します。


上部のmqtt outノードでブローカーにメッセージを送信しています。一方、下部のmqtt inノードでブローカーが配信したメッセージを受信しています。イメージではノードのステータスが「接続済」となっていますが、現時点ではステータスの表示が違っていても気にしなくて大丈夫です。

mqtt outノードは以下のように設定します。この内、「サーバ」は右上の鉛筆アイコンを選択して編集します。トピックはとりあえず「hoge」の文字を指定しておきます。


続いて、サーバの編集を行います。「サーバ」と言っていますが、実際には「mqtt-brokerノード」の編集画面です。ポイントは以下のとおりです。
  • 名前:ブローカーを識別するための適当な文字列を指定します
  • サーバ:今回はローカルのブローカーに接続するので「localhost」と入力します
  • ポート:デフォルトの「1883」のままにしておきます
    • さっき起動したmosquittoと合わせておきます



続いて、mqtt inノードは以下の通りに設定します。
  • サーバ:先程設定したmqtt brokerノードの設定を選択します。
  • トピック:mqtt outノードと同じく「hoge」と設定します



以上で設定は完了です。設定が正しければ、デプロイするとmqtt inノードとmqtt outノードのステータスに「接続済」と表示されるはずです。

フローを実行すると以下のようなログが出力されます。
  • payload:injectノードで設定した時刻が出力されています
  • topic:mqtt in/outノードで設定したトピック名「hoge」が出力されています


MQTTクライアントで送信したメッセージをmqtt inノードで受信する

続いて、3rdパーティ製のMQTTクライアントで送信したメッセージをmqtt inノードで受信します。今回利用したMQTTクライアントは「MQTT X」です。ポイントは以下の通りで、最初にインストールしたブローカーmosquittoの待受ポートに接続設定します。
  • Host:localhost
  • Port:1883
Connectした後、トピック「hoge」に対して以下のようなメッセージを送信します。


Node-REDではmqtt inノードで受信した以下のようなメッセージがログ出力されているはずです。


まとめ

ここまで確認したことをまとめます。
  • ブローカーをインストール&起動しました
  • mqtt in/outノードからブローカーに接続して、メッセージの送受信を確認しました
  • 3rdパーティ製MQTTクライアントが送信したメッセージをmqtt inノードで受信できることを確認しました
MQTTノードについてはこんなもんでしょうか。


コメント

このブログの人気の投稿

Execノードを使う

Joinノードを使う(その4)

SendGridのX-SMTPAPIヘッダの使い方(Section Tags、Substitution Tags編)