mosquittoのBrokerの導入

Eclipse Mosquittoは、MQTT プロトコルの versions 5.0, 3.1.1 and 3.1.に対応したオープンソースのブローカーソフトです。オリジナルのホームページは、ここです。このホームページからソースファイル以外にもバイナリで、Windows、Mac、Debian、Raspberry Pi、Ubuntu対応のソフトがダウンロードできます。

mosquittoの最新版は、Ver.2.0.15です(2022年11月18日時点)。これは、MQTTプロトコルのversion 5.0, 3.1.1,3.1に対応しています。その前のmosquittoのバージョンは、Ver.1.6.9です。このバージョンは、MQTTプロトコルのversion 5.0, 3.1.1,3.1に対応しています。

ここでは、GCP上のVM(Virtual Machine)に搭載したUbuntuにmosquttoのブローカーとクライアントソフトをインストールし、Node-REDを使ったパブリッシング/サブスクライブ動作確認を行います。

1. mosquittoのインストール

mosquittoのブローカーとクライアントをインストールします。

1-1. クライアントのインストール

VM のコンソール画面で以下のコマンドを実行します。

sudo apt install mosquitto-clients -y

1-2. ブローカーのインストール

VM のコンソール画面で以下のコマンドを実行します。

sudo apt install mosquitto -y

1-3. 起動の確認

mosquittoは、インストール後自動で起動しています。以下のコマンドで確認してみます。

systemctl status mosquitto.service

active (running)となっていれば実行されています。

2. パブリッシング/サブスクライブ動作確認(VMコンソール)

コンソール画面を使って、簡単に動作確認を行います。もう一枚コンソール画面を開いてください。一枚をサブスクライブ用の画面、もう一枚をパブリッシング用の画面として動作確認を行います。

2-1. サブスクライブの準備

サブスクライブ用の画面で以下のコマンドを実行します。”-t test”でトピックスを”test”に指定しています。また、”-d”は、デバッグメッセージの表示を許可するオプションです。トピックス”test”で送られてくる情報をサブスクライブする準備が出来ました。

mosquitto_sub -d -t test

2-2. パブリッシング動作

パブリッシング用の画面で以下のコマンドを実行します。同様に、”-t test”はトピックスを”test”に指定し、”-d”でデバッグメッセージを許可し得います。ここでは、-m ”Hello world!!”で、”Hello world!!”というメッセージをパブリッシングしています。

mosquitto_pub -d -t test -m "Hello world!"

2-3. サブスクライブ動作確認

ここで、サブスクライブ用の画面に”Hello world!!”が表示されているはずです。確認してみてください。

3. パブリッシング/サブスクライブ動作確認(Node-RED)

次にNode-REDのmqtt out/in ノードを使って動作確認を行ってみたいと思います。

3-1. Node-REDのフロー作成

まず、Node-REDを起動し、新しいタブを作成します。そして、次から操作手順に従って動作確認用のフローを作成してください。

3-1-1. injectノードの配置と設定

① injectノードを配置する。ダブルクリックをしてプロパティ画面を表示する。
② msg.payloadに文字列“Hello world!!”と入力する。
③ 完了を押す。

3-1-2. mqtt outノードの配置と設定

① mqtt outノードを配置し、injectノードと繋ぎます。ダブルクリックをしてプロパティ画面を表示させます。
② トピック欄に“test”と入力します。
③ サーバの「新規にmqtt-brokerを追加」の横の鉛筆マークをクリックします。

④ サーバー欄にIPアドレスを入力します。ここでは同じGCPにブローカーがあるので、”localhost”と入力します。
⑤ 名前欄に”mosquito”と入力します。
⑥ 追加を押します。

⑦ 前の画面に戻りますので、完了を押します。

3-1-3. mqtt inノードの配置と設定

① mqtt inノードを配置します。ダブルクリックをしてプロパティ画面を表示させます。
② トピック欄に“test”と入力します。
③ サーバの欄が”mosquito”になっていることを確認します。
④ 完了を押します。

3-1-4. debugノードの配置と設定

① debugノードを配置します。mqtt inノードと繋ぎます。
② 右側がデバッグ画面になっていない場合は、虫マークを押してデバッグ画面にしておきます。
③ デプロイを押します。

3-2. 動作確認

① injectノードのボタンを押します。
② デバッグ画面に”Hello world!!”と表示され、mqttによる通信が行われていることが確認できました。

4. mosquittoにおけるパスワード設定

mosquittoでは、パブリッシングやサブスクライブの際に、ユーザー名とパスワードを設定することができます。
mosquittoのユーザー名とパスワードの設定方法に関しては、こちらのページ(Mosquittoでパスワードログインを使う)を参考にしました。

4-1. mosquitto 側のパスワード設定

・mosquitto側のパスワード設定は、端末画面からコマンドを打って行います。使用するコマンドは、mosquitto_passwdです。
 ① GCPの端末画面を開きます。
 ② パスワードファイルを作成するために、以下コマンドを入力します。“pwfile”がパスワードファイル名です。名称は任意です。
  パスワードを聞いてきますので、2回入力するとパスワードファイルが作成されます。
  -c オプションは新規作成を指示するオプションです。すでにファイル名が存在する場合には、上書きされます。

実行後、パスワードファイルが指定した名前で出来ます。中には、ユーザ名と暗号化されたパスワードが記載されています。

・ユーザー名は、複数指定できます。
 ③ 追加する場合には、-c オプションを外して実行します。

同様に出来たファイルを確認すると、ユーザー名が追加されているのが分かります。

・次に、mosquttoの設定ファイルに、パスワードファイル名と認証を使用する旨を追記します。


 ④ 追記するのは以下の2行です。ファイル名を変更している場合は、適宜変更してください。

⑤ 最後に、mosquittoを再起動します。

sudo systemctl restart mosquitto.service

4-2. Node-RED 側のパスワード設定

Node-REDのMQTT in/outノードにパスワードを設定します。
① MQTT in/outのいずれかのノードをダブルクリックして、プロパティ画面を表示します。
② サーバ欄の横の鉛筆マークをクリックします。

③ セキュリティタブを選びます。
④ ユーザー名とパスワードを入力します。
⑤ 入力が終わったら、「更新」をクリックします。

⑥ デプロイします。

4-3. 動作確認

① Injectノードのボタンを押して、“Hello world!!”をパブリッシングします。
② サブスクライブされて、“Hello world!!”がデバッグ画面に表示されます。

4-4. 複数ユーザーの確認

・サブスクライブ側のユーザー名とパスワードを変更して、サブスクライブできるかを確認します。
① MQTT in ノードをダブルクリックして、プロパティ画面を表示します。
② サーバー欄のドロップメニューから「新規にmqtt-brokerを追加…」を選択します。
③ その後、鉛筆マークをクリックします。

④ サーバ欄に、GCPの外部IPを入力します。
⑤ 名前を入力します。
⑥ セキュリティタブを選択します。

⑦ ユーザ名を入力します。
⑧ パスワードを入力します。
⑨ 入力し終わったら、「追加」を押します。

⑩ 「完了」を押します。
⑪ 「デプロイ」を押します。

⑫ Injectノードのボタンを押して、Test-User-01のユーザ名で、“Hello world!!”をパブリッシングします。
⑬ Test-User-02の名前でサブスクライブされて、“Hello world!!”がデバッグ画面に表示されます。

 

参考文献について

インターネット記事のの参考文献の表記
※ 執筆者(組織名), 「記事のタイトル」, 記事の発行年, <URL>, (閲覧日).

執筆者(組織名): Eclipse Foundation

「記事のタイトル」:Eclipse Mosquitto

記事の発行年:更新日 : 不明 ,

<URL>:https://mosquitto.org/

閲覧日: 2022年11月17日閲覧