Install Mosquitto MQTT Broker on Raspberry Pi
(https://randomnerdtutorials.com/how-to-install-mosquitto-broker-on-raspberry-pi/)
(備忘録として翻訳しました。内容に関する問合せは受けておりません。自分でも試している状況です。)
このチュートリアルでは、Raspberry PiボードにMQTT通信を目的としたMosquitto Brokerをインストールする方法を紹介します。
Updated 10 June 2022 / 更新 2022年6月10日
クラウド上で実行されているMosquitto MQTTブローカーと同じように実行が可能です。
MQTT Mosquitto Brokerをクラウドで実行すると、インターネット接続さえあれば、異なるネットワークを使用してどこからでも複数のESP32/ESP8266ボードや他のIoTデバイスを接続することができます。
以下のチュートリアルをご確認ください。
MQTTブローカーとは何ですか?
MQTTとは、Message Queuing Telemetry Transportの略です。
MQTTはシンプルなメッセージングプロトコルで、帯域幅の狭い制約のあるデバイスのために設計されています。
つまり複数のIoTデバイス間でデータを交換するのに最適なソリューションです。
MQTT通信はパブリッシュとサブスクライブのシステムとして機能します。
デバイスは特定のトピックに関するメッセージを公開します。
そのトピックを購読しているすべてのデバイスは、そのメッセージを受信します。
MQTTブローカーは、すべてのメッセージを受信し、メッセージをフィルタリングし、誰がそのメッセージに興味があるかを決定し、そしてすべての購読クライアントにメッセージを発行する役割を果たします。
使用できるブローカーはいくつかあります。
ホームオートメーションのプロジェクトでは、Raspberry PiにインストールされたMosquitto Brokerを使用しています。
また、MosquittoブローカーをPCにインストールすることもできます(ただし、デバイス間のMQTT接続を維持するためにPCを常時起動しておく必要があるため、Raspberry Piボードを使うような利便性は欠ける)。
MQTT通信の詳しい説明は、こちらの記事をご覧ください。
MQTTとは何か、どのように機能するか
前提条件
このチュートリアルを続ける前に
- Raspberry Piボードに精通している必要があります – Getting Started with Raspberry Pi をお読みください。
- Raspberry Pi OSをRaspberry Piにインストールする必要があります – Install Raspberry Pi OS, Set Up Wi-Fi, Enable and Connect with SSH;
- また、以下のハードウェアが必要です。
前出のリンクから、または直接MakerAdvisor.com/toolsにアクセスし、あなたのプロジェクトに必要なすべてのパーツをベストプライスで見つけることができます。
もしあなたがホームオートメーションが好きで、完全なホームオートメーションシステムを構築したいのであれば、私のホームオートメーションコースをダウンロードすることをお勧めします。
Raspberry Pi OSへのMosquitto Brokerのインストール
Raspberry PiボードにRaspberry Pi OSの準備ができたら、このチュートリアルの続きです。
Mosquitto Brokerをインストールしましょう。
1) Raspberry Piのターミナルウィンドウを新規に開きます。
Raspberry Piをヘッドレスで動かしている場合は、こちらのチュートリアルで、パソコンとRaspberry Piの間にSSH接続を確立する方法を確認してください。
2) 以下のコマンドを実行し、システムのアップグレードとアップデートを行います。
sudo apt update && sudo apt upgrade
3) YとEnterを押してください。
アップデートに時間がかかります(私の場合、約10分かかりました)。
4) Mosquitto Brokerをインストールするために、次のコマンドを入力します。
sudo apt install -y mosquitto mosquitto-clients
5) Raspberry Piの起動時にMosquittoを自動起動させるには、次のコマンドを実行します(これは、Raspberry Piの起動時にMosquittoブローカーを自動起動させることを意味します)。
sudo systemctl enable mosquitto.service
6) 最後に、以下のコマンドを実行してインストールをテストします。
mosquitto -v
Raspberry Piで現在動作しているMosquittoのバージョンが表示されます。
2.0.11以上であることが確認できます。
次のようなメッセージが表示されます。
「ローカル・オンリー・モードで起動します。
このマシン上で動作しているクライアントからの接続のみが可能です。
リモートアクセスを許可するリスナーを定義した設定ファイルを作成してください。」
デフォルトでは、他のデバイス(Raspberry Pi以外)からMosquittoブローカーと通信できないことを意味します。
これはMosquitto バージョン 2 に適用されます。
このトピックに関する詳細な情報は、Mosquittoのドキュメントに記載されています。
「Mosquitto 2.0以降では、クライアントが接続できるようになる前に、認証オプションを明示的に選択する必要があります。
それ以前のバージョンでは、デフォルトでクライアントが認証なしで接続できるようになっています。」
リモートアクセス/認証の有効化
他のIoTデバイスと通信できるようにリモートアクセスを有効にするには、設定ファイルを編集/作成する必要があります。
このチュートリアルでは、以下を取り上げます。
あなたのシナリオに適したセクションを選択してください。
また詳細については、ドキュメントをご覧になることをお勧めします。
Mosquitto Broker リモートアクセスを有効にする(認証なし)
1) 以下のコマンドを実行し、mosquitto.conf ファイルを開きます。
sudo nano /etc/mosquitto/mosquitto.conf
2) 矢印キーでファイルの末尾に移動し、以下の2行を貼り付けます。
listener 1883
allow_anonymous true
3) 次に、CTRL-Xを押して終了し、ファイルを保存します。
Y を押し、Enter を押します。
4) 変更を有効にするために、Mosquittoを再起動します。
sudo systemctl restart mosquitto
Mosquitto Broker リモートアクセスを有効にする(認証:ユーザーとパスワード)
MQTTブローカーにユーザー/パスワード認証を追加することができます。
1) 以下のコマンドを実行します。
ただし、YOUR_USERNAME は使用するユーザ名に置き換えてください。
sudo mosquitto_passwd -c /etc/mosquitto/passwd YOUR_USERNAME
今回は、MQTTのユーザ sara を使うので、以下のようにコマンドを実行します。
sudo mosquitto_passwd -c /etc/mosquitto/passwd sara
目的のユーザー名で先のコマンドを実行すると、パスワードの入力を求められます。
入力中のパスワードは、文字が表示されません。
パスワードを入力し、ユーザーとパスの組み合わせを記録してください。
後でプロジェクトでブローカーと接続する際に必要になります。
この前のコマンドで、/etc/mosquittoディレクトリにpasswdというパスワードファイルが作成されます。
ここで、mosquitto の設定ファイルを編集して、定義したユーザー名とパスワードでしか認証できないようにする必要があります。
2) 以下のコマンドを実行し、設定ファイルを編集します。
sudo nano /etc/mosquitto/mosquitto.conf
3) ファイルの先頭に以下の行を追加します(ファイルの先頭にないと動作しませんのでご注意ください)。
per_listener_settings true
4) 以下の3行を追加して、認証済みユーザーの接続を許可し、ユーザー名/パスワードファイルの場所をMosquittoに知らせます。
allow_anonymous false
listener 1883
password_file /etc/mosquitto/passwd
設定ファイルは以下のようになります(新しい行は太字で表示)。
# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example
per_listener_settings true
pid_file /var/run/mosquitto/mosquitto.pid
persistence true
persistence_location /var/lib/mosquitto/
log_dest file /var/log/mosquitto/mosquitto.log
include_dir /etc/mosquitto/conf.d
allow_anonymous false
listener 1883
password_file /etc/mosquitto/passwd
5) CTRL-X、Yの順にキーを押し、最後にEnterキーを押して終了し、変更を保存します。
6) 変更を有効にするためにMosquittoを再起動します。
sudo systemctl restart mosquitto
Mosquittoが実際に起動しているかどうかを確認するには、次のコマンドを実行します。
sudo systemctl status mosquitto
これで、ユーザー名とパスワードによる認証が有効になりました。
ブローカーと通信するたびに、ユーザー名とパスワードが必要になることを覚えておいてください。
ユーザーを追加する/パスワードを変更する
既存のパスワードファイルにユーザーを追加したり、既存のユーザーのパスワードを変更したりするには、-c 引数を省略します。
mosquitto_passwd <password file> <username>
たとえば、saraというユーザーのパスワードを変更したい場合、作成したパスワードファイルがpasswdという名前だったことを考慮すると、コマンドは次のようになります。
sudo mosquitto_passwd /etc/mosquitto/passwd sara
Raspberry PiのIPアドレス
Mosquittoブローカーを後でプロジェクトで使用するためには、Raspberry PiのIPアドレスを知っておく必要があります。
Raspberry Pi の IP アドレスを取得するには、Pi のターミナルウィンドウで次のコマンドを入力します。
hostname -I
今回の場合、Raspberry PiのIPアドレスは192.168.1.144です。
Raspberry PiのIPアドレスは、今後のプロジェクトで必要になるので、保存しておきましょう。
Mosquitto ブローカーと MQTT クライアントのテスト
Mosquittoブローカーをインストールしたら、インストールをテストする必要があります。
次のチュートリアルに従うとよいでしょう。
まとめ
IoTプロジェクトでMQTTプロトコルを使用したい場合、MQTTブローカーは必須です。
MQTT ブローカーは、すべての MQTT メッセージを受信し、すべてのサブスクライブしたクライアントに転送します。
このチュートリアルでは、Raspberry Pi に Mosquitto ブローカーをインストールする方法について学びました。
ホームオートメーションが好きですか?
Node-RED、Raspberry Pi、ESP8266、Arduinoについて、私のコースでもっと学んでください。
100ドルでホームオートメーションシステムを構築する。
何か質問はありますか?下にコメントを残してください
お読みいただきありがとうございます。
この記事が好きなら、おそらくあなたは私の次のものを好きかもしれませんので、私のブログを購読することによって私をサポートしてください。
(以上、備忘録)
実行結果
Raspberry PiにMosquittoをインストールし、事務所の中にローカルなMQTTブローカーを立ち上げることを計画しました。
その際、インストール手順などが英文で詳細に記載されていましたので、翻訳しました。
Mosquittoのサイトでは、最新バージョンは2.0.14が配布されていますが、実際にインストールすると、install コマンドでインストヘルされる最新バージョンは1.5.7のようです。
ユーザーの追加やパスワードの設定はバージョン2.0以降なので、ユーザーやパスワードに関する設定や手続きは確認出来ていません。
今後、アップデートが行われるようになれば、また確認したいと思います。
この後、事務所内に設置したCO2濃度系の測定値を定期的にMQTTで送信し、RaspberryPiに蓄積させる予定です。
その後、Node-redのサーバーを立上げ、事務所内で、閲覧できるようにします。
現在、社内ネットワークへの接続や社外へのデータ転送はセキュリティや経費の都合で実現することはできません。
そこで、簡易なローカルネットワークを構築し、可能な範囲でIoTの事例を作ることにしました。
事例ができれば、その先の課題に応じて、その方面の専門家を交えながら解決が図れるものと思います。
事業化や社内への取り込みを考えておられる経営者の皆さん。
興味があれば、お問い合わせいただければと思います。
よろしくお願いいたします。